洛谷 P1347 排序
来源:互联网 发布:sql server 查询二进制 编辑:程序博客网 时间:2024/06/07 19:01
P1347 排序
题目描述
一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A<B,B<C,C<D。在这道题中,我们将给你一系列形如A<B的关系,并要求你判断是否能够根据这些关系确定这个数列的顺序。
输入输出格式
输入格式:
第一行有两个整数n,m,n表示需要排序的元素数量,2<=n<=26,第1到n个元素将用大写的A,B,C,D....表示。m表示将给出的形如A<B的关系的数量。
接下来有m行,每行有3个字符,分别为一个大写字母,一个<符号,一个大写字母,表示两个元素之间的关系。
输出格式:
若根据前x个关系即可确定这n个元素的顺序yyy..y(如ABC),输出
Sorted sequence determined after xxx relations: yyy...y.
若根据前x个关系即发现存在矛盾(如A<B,B<C,C<A),输出
Inconsistency found after 2 relations.
若根据这m个关系无法确定这n个元素的顺序,输出
Sorted sequence cannot be determined.
(提示:确定n个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况)
输入输出样例
输入样例#1:
1:4 6A<BA<CB<CC<DB<DA<B2:3 2A<BB<A3:26 1A<Z
输出样例#1:
代码
1:Sorted sequence determined after 4 relations: ABCD.2:Inconsistency found after 2 relations.3:Sorted sequence cannot be determined.
虽说标签是拓扑
但是完全可以乱搞
只有26个点 嘿嘿 想怎么搞就怎么搞
每次输入先判有没有环
等n个点都出现后
再判断是否有矛盾
输入结束后上面两种情况没有出现
那就是无法确定顺序
1 #include <cstring> 2 #include <ctype.h> 3 #include <cstdlib> 4 #include <vector> 5 #include <cstdio> 6 7 const int MAXN=27; 8 9 int n,m,tot;10 11 int ans[MAXN],out[MAXN],in[MAXN],map[MAXN][MAXN];12 13 bool vis[MAXN];14 15 std::vector<int> v[MAXN];16 17 inline void read(int&x) {18 int f=1;register char c=getchar();19 for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());20 for(;isdigit(c);x=x*10+c-48,c=getchar());21 x=x*f;22 }23 24 inline bool pd() {25 for(int k=1;k<=n;++k)26 for(int i=1;i<=n;++i)27 for(int j=1;j<=n;++j)28 map[i][j]=map[i][k]&map[k][j]|map[i][j];29 for(int i=1;i<=n;++i)30 if(map[i][i]==true) return true;31 return false;32 }33 34 void print(int pos,int sum,int id) {35 ans[sum]=pos;36 if(sum==n) {37 printf("Sorted sequence determined after %d relations: ",id);38 for(int i=n;i>=1;--i) 39 printf("%c",char(ans[i]+'A'-1));40 printf(".\n");41 exit(0);42 }43 for(int i=0;i<v[pos].size();++i) 44 print(v[pos][i],sum+1,id);45 }46 47 inline void judge(int id) {48 if(pd()) {49 printf("Inconsistency found after %d relations.",id);50 exit(0);51 }52 for(int i=1;i<=n;++i)53 if(!in[i]) {54 print(i,1,id);55 break;56 }57 }58 59 int hh() {60 char s[5];61 read(n);read(m);62 for(int i=1;i<=m;++i) {63 scanf("%s",s);64 int x=s[0]-'A'+1;65 int y=s[2]-'A'+1;66 map[y][x]=true;67 v[y].push_back(x),++in[x],++out[y];68 if(!vis[x]) ++tot,vis[x]=true;69 if(!vis[y]) ++tot,vis[y]=true;70 if(pd()) {71 printf("Inconsistency found after %d relations.",i);72 return 0;73 }74 if(tot==n) judge(i);75 }76 printf("Sorted sequence cannot be determined.\n");77 return 0;78 }79 80 int sb=hh();81 int main() {;}
阅读全文
0 0
- 洛谷 P1347 排序
- Vijos P1347 乘积最大
- P1347 乘积最大
- Vijos P1347 乘积最大
- Vijos P1347 乘积最大
- vijos p1347&&vijos p1455(递推)
- Vijos P1347 乘积最大(动态规划,区间DP)
- 【排序】洛谷 P1177 【模板】快速排序
- [洛谷1177]快速排序
- 快速排序-洛谷 1177
- 【排序】洛谷 P1104 生日
- 洛谷Oj-奖学金-排序
- 洛谷 [模板]快速排序
- 排序
- 排序
- 排序
- 排序
- 排序
- [SDOI2010]魔法猪学院 --k短路
- [ZJOI2008]树的统计Count
- [USACO Mar08] 牛跑步 --k短路
- [POJ3255] 地砖RoadBlocks
- [USACO08JAN]牛大赛Cow Contest
- 洛谷 P1347 排序
- P1137 旅行计划--拓扑排序
- P1807 最长路_NOI导刊2010提高(07)--最长路
- [HAOI2006]受欢迎的牛
- [SDOI2010]所驼门王的宝藏 --tarjan缩点+最长路
- [USACO06JAN]牛的舞会The Cow Prom
- P3038 [USACO11DEC]牧草种植Grass Planting
- [NOIP2010冲刺十三] 逃离遗迹
- COGS 244. [POI2000] 滑雪队