认识的动物可以交换,找出其中字典序最小的一种排列
思路:思路就是拓扑排序
先把所有的动物名称进行排序,用他们的位置代表他们的名称,然后算出哪些是朋友,核心部分就是对每个字符串进行处理,对每个位置的动物进行处理实际上就是把每种动物都看成一个点,可以交换的就看成两个点之间有一条边,然后跑一边拓扑排序就出来。

 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题解相关推荐

  1. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  2. css 好困难字体样式_帮助阅读困难者的字体和浏览器扩展

    css 好困难字体样式 G-Stock Studio/Shutterstock G-Stock Studio / Shutterstock Dyslexia is a learning conditi ...

  3. leetcode 1721. Swapping Nodes in a Linked List | 1721. 交换链表中的节点(Java)

    题目 https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ 题解 思路很简单:找到左节点,找到右节点,最后交换左右节点的 val ...

  4. 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 ...

  5. cf1556B B. Take Your Places!

    cf1556B B. Take Your Places! 题意: 有n个数,你可以将相邻两个数交换,使得奇偶性一样的数不相邻.问最少操作步数 题解: 最终排列无非是:奇,偶,奇-或者偶,奇,偶- 如果 ...

  6. Game of Swapping Numbers

    Game of Swapping Numbers 题意: A,B两个数组,让你对A进行k次操作,每次操作为选两个位置的数,进行交换,求最大化的Σ|Ai-Bi| 题解: 以前有做过最小化的情况,就是把每 ...

  7. TYUT-A专题题解(一)

    TYUT-A专题题解(一) 01A Ad Hoc UVA353 LA5247 Pesky Palindromes[回文] - 海岛Blog - CSDN博客 UVA947 Master Mind He ...

  8. Competitive Programming专题题解(1)

    Competitive Programming题解 AOAPC I: Beginning Algorithm Contests 题解 CP2-1.1.1 Easy(Ad Hoc Problems) P ...

  9. AOAPC I: Beginning Algorithm Contests 题解

    AOAPC I: Beginning Algorithm Contests 题解 AOAPC I: Beginning Algorithm Contests (Rujia Liu) - Virtual ...

最新文章

  1. 前端Vue学习之路(一)-初识Vue
  2. 型人格 disc测试_3号,成就型人格的专业和职业选择@九型人格测试
  3. linux ssh 登陆后欢迎界面 banner 设置
  4. Android4.4KitKat支持u盘功能
  5. JVM 内存区域大小参数设置
  6. 生成树生成森林c语言中文网,生成树协议(STP)基本知识及实验(使用eNSP)
  7. golang PHP的区别,erlang和golang的区别
  8. tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10
  9. js 报错说此方法没定义 我明明定义了
  10. Codeforces 385C 线性筛素数
  11. 堪比ps的mac修图软件 Pixelmator Pro 2.0.6中文版 支持Silicon M1
  12. 手机浏览器下载IOS版APP
  13. mysql mybatis批量删除,Mybatis批量删除多表
  14. 线性方程组(六)- 线性方程组的应用
  15. 单链表创建学生成绩表 输出学生姓名成绩及班级平均分
  16. GWAS理论 1-3 群体结构与亲缘关系评估
  17. 解决windows11屏幕亮度忽明忽暗的问题
  18. 微信hook——登录界面的账号密码
  19. 并发编程 定时线程池ScheduledThreadPoolExecutor学习总结
  20. javascript下载文件几种方式,接收后台返回流下载或直接下载文件

热门文章

  1. 58同城笔试(2021/10/23)
  2. JavaScript经典案例:用户协议确认
  3. 2019.08_【FSGAN】_Subject Agnostic Face Swapping and Reenactment 论文翻译
  4. [MySQL]复杂查询(进阶)
  5. PostgreSQL vs MySQL——哪种关系数据库更好?
  6. 内存 60 年变迁史
  7. 社保系列7《PSAM卡》
  8. 【colaboratory】谷歌colab挂载硬盘使用
  9. 等保2.0 信息安全及等保标准体系概述
  10. 上海财经大学浙江学院计算机应用,【招生季⑦】今晚带你走进上海财经大学浙江学院——经济与信息管理系...