HDU 2094 产生冠军
2011-05-13 11:40
411 查看
这个题开始一看是并查集,后来改了很久,怎么改也改不过,只得翻大牛的代码,原来大牛们都是这样写的,左边的为胜利者,有边的为失败者,如果左边的胜利者只有一个没在右边出现过,那么这个就是产生的冠军,否则产生不了
、
、
#include<stdio.h> #include<string.h> int set[1005],n,f,c,num[1005]; char ch[1005][20]; int search( char str[] ) { for( int i = 1; i < c; ++i ) if( !strcmp( str,ch[i] ) ) return i; strcpy( ch[c],str ); int len = strlen( str ); ch[c][len] = 0; return c++; } int main( ) { while( scanf( "%d",&n ),n ) { c = 1; f = 1; for( int i = 0; i <= 2*n; ++i ) set[i] = 2; for( int i = 1; i <= n; ++i ) { int x,y; char str1[20],str2[20]; scanf( "%s%s",str1,str2 ); x = search( str1 ); y = search( str2 ); set[y] = 0;//标记在右边出现过 if( set[x] == 2 )//防止在左边出现的已经在右边出现了 set[x] = 1;//标记在左边出现过 } int cout = 0; for( int i = 1; i < c; ++i ) if( set[i] == 1 ) ++cout; if( cout != 1 ) f = 0; puts( f ? "Yes":"No" ); } return 0; }
相关文章推荐
- [HDU] 2094 产生冠军(拓扑排序+map)
- hdu 2094 产生冠军
- hdu 2094 产生冠军 拓扑排序
- HDU 2094 产生冠军
- HDU 2094 产生冠军 map
- HDU 2094 产生冠军 hash 水题
- HDU——2094产生冠军
- hdu 2094 产生冠军
- HDU 2094 产生冠军(拓扑排序)
- HDU 2094 产生冠军
- HDU 2094 产生冠军
- HDU 2094 产生冠军
- hdu-2094-产生冠军(map&拓扑)
- HDU 2094 产生冠军(map)
- HDU 2094 -- 产生冠军 (邻接表或直接比较)
- HDU 2094 产生冠军
- HDU2094 产生冠军(容器)
- hdu 2094 产生冠军
- HDU 2094产生冠军(拓扑排序+map)
- HDU 2094产生冠军(map)