Swapping Places题解
认识的动物可以交换,找出其中字典序最小的一种排列
思路:思路就是拓扑排序
先把所有的动物名称进行排序,用他们的位置代表他们的名称,然后算出哪些是朋友,核心部分就是对每个字符串进行处理,对每个位置的动物进行处理实际上就是把每种动物都看成一个点,可以交换的就看成两个点之间有一条边,然后跑一边拓扑排序就出来。
for(int i=1;i<=l;i++){int cnt=0;for(int j=1;j<=n;j++){if(!vis[pos[i]][j]){cnt+=sum[j];}}vt[pos[i]].push_back(cnt);//把每个字符串看成一条边,sum[pos[i]]++;//这个点前面有多少个点进行了计算}
拓扑排序
for(int i=1;i<=l;i++)for(int j=1;j<=n;j++)if(pos2[j]<vt[j].size())//如果大于证明跟j朋友关系的点已经算完了if(vt[j][pos2[j]]==num[j])//相当于当这个点为0的时候,前面的都计算完了,到这个点入列{pos2[j]++;p[i]=j;for(int k=1;k<=n;k++){if(!vis[k][j]){num[k]++;}}break;//找到最小的一个字符串,输出肯定是字典序最小。}
然后就是完整代码
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <iostream>
#include <ostream>
#include <cstring>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <map>
#include<iomanip>
#define INT_MINs -2000000000
#define INT_MAXs 1000000001
#define mod 1000000007
#define MID mid=(l+r)/2
#define REP1(i,x,y) for(int i=x;i<y;i++)
#define REP2(i,x,y) for(int i=x;i<=y;i++)
#define ls (2*k)
#define lr (2*k+1)
#define lson l,mid,2*k
#define lron mid+1,r,2*k+1
#define inf 0x3f3f3f3f3f3f3f3f
#define IOS ios::sync_with_stdio(0);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};
bool vis[205][205];
map<string,int>maps;
string str1[205];
int pos[100005],sum[205];
vector<int>vt[205];
int pos2[100005];
int num[205],p[100005];
int main()
{int n,m,l;cin>>n>>m>>l;for(int i=1;i<=n;i++){cin>>str1[i];vis[i][i]=true;}sort(str1+1,str1+1+n);//保证字典序最小for(int i=1;i<=n;i++){maps[str1[i]]=i;}for(int i=1;i<=m;i++){string str2,str3;cin>>str2>>str3;vis[maps[str2]][maps[str3]]=vis[maps[str3]][maps[str2]]=true;}for(int i=1;i<=l;i++){string str2;cin>>str2;pos[i]=maps[str2];}for(int i=1;i<=l;i++){int cnt=0;for(int j=1;j<=n;j++){if(!vis[pos[i]][j]){cnt+=sum[j];}}vt[pos[i]].push_back(cnt);sum[pos[i]]++;}for(int i=1;i<=l;i++)for(int j=1;j<=n;j++)if(pos2[j]<vt[j].size())if(vt[j][pos2[j]]==num[j]){pos2[j]++;p[i]=j;for(int k=1;k<=n;k++){if(!vis[k][j]){num[k]++;}}break;}for(int i=1;i<=l;i++)cout<<str1[p[i]]<<' ';return 0;
}
Swapping Places题解相关推荐
- 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)
题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...
- css 好困难字体样式_帮助阅读困难者的字体和浏览器扩展
css 好困难字体样式 G-Stock Studio/Shutterstock G-Stock Studio / Shutterstock Dyslexia is a learning conditi ...
- leetcode 1721. Swapping Nodes in a Linked List | 1721. 交换链表中的节点(Java)
题目 https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ 题解 思路很简单:找到左节点,找到右节点,最后交换左右节点的 val ...
- 2021牛客暑期多校训练营1 G Game of Swapping Numbers 思维 + 巧妙的转换
传送门 文章目录 题意: 思路: 题意: 给你两个数组A,BA,BA,B,你可以选择AAA的两个位置i,j,i<ji,j,i<ji,j,i<j交换Ai,AjA_i,A_jAi,Aj ...
- cf1556B B. Take Your Places!
cf1556B B. Take Your Places! 题意: 有n个数,你可以将相邻两个数交换,使得奇偶性一样的数不相邻.问最少操作步数 题解: 最终排列无非是:奇,偶,奇-或者偶,奇,偶- 如果 ...
- Game of Swapping Numbers
Game of Swapping Numbers 题意: A,B两个数组,让你对A进行k次操作,每次操作为选两个位置的数,进行交换,求最大化的Σ|Ai-Bi| 题解: 以前有做过最小化的情况,就是把每 ...
- TYUT-A专题题解(一)
TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...
- Competitive Programming专题题解(1)
Competitive Programming题解 AOAPC I: Beginning Algorithm Contests 题解 CP2-1.1.1 Easy(Ad Hoc Problems) P ...
- AOAPC I: Beginning Algorithm Contests 题解
AOAPC I: Beginning Algorithm Contests 题解 AOAPC I: Beginning Algorithm Contests (Rujia Liu) - Virtual ...
最新文章
- 前端Vue学习之路(一)-初识Vue
- 型人格 disc测试_3号,成就型人格的专业和职业选择@九型人格测试
- linux ssh 登陆后欢迎界面 banner 设置
- Android4.4KitKat支持u盘功能
- JVM 内存区域大小参数设置
- 生成树生成森林c语言中文网,生成树协议(STP)基本知识及实验(使用eNSP)
- golang PHP的区别,erlang和golang的区别
- tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10
- js 报错说此方法没定义 我明明定义了
- Codeforces 385C 线性筛素数
- 堪比ps的mac修图软件 Pixelmator Pro 2.0.6中文版 支持Silicon M1
- 手机浏览器下载IOS版APP
- mysql mybatis批量删除,Mybatis批量删除多表
- 线性方程组(六)- 线性方程组的应用
- 单链表创建学生成绩表 输出学生姓名成绩及班级平均分
- GWAS理论 1-3 群体结构与亲缘关系评估
- 解决windows11屏幕亮度忽明忽暗的问题
- 微信hook——登录界面的账号密码
- 并发编程 定时线程池ScheduledThreadPoolExecutor学习总结
- javascript下载文件几种方式,接收后台返回流下载或直接下载文件
热门文章
- 58同城笔试(2021/10/23)
- JavaScript经典案例:用户协议确认
- 2019.08_【FSGAN】_Subject Agnostic Face Swapping and Reenactment 论文翻译
- [MySQL]复杂查询(进阶)
- PostgreSQL vs MySQL——哪种关系数据库更好?
- 内存 60 年变迁史
- 社保系列7《PSAM卡》
- 【colaboratory】谷歌colab挂载硬盘使用
- 等保2.0 信息安全及等保标准体系概述
- 上海财经大学浙江学院计算机应用,【招生季⑦】今晚带你走进上海财经大学浙江学院——经济与信息管理系...