poj2912(带权并查集+枚举)
生活随笔
收集整理的這篇文章主要介紹了
poj2912(带权并查集+枚举)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://poj.org/problem?id=2912
題意:給n個人,m組關系,玩石頭剪刀布的游戲,n個人中除一個人judge以外,其他人屬于3個group(即石頭、剪刀、布),他們只能出這一個手勢,而judge可以隨便出,要求能否找到judge和在第幾組關系時能最先找到judge。
思路:poj1182食物鏈的進階版,與那題不同的是,這里需要枚舉0到n-1,枚舉i假設其為judge,然后遍歷不包含i的所有關系,如果符合條件,則i就是judge,否則其不是judge,記錄其判斷出不是judge的那條邊line(后面要用),遍歷結束之后,如果judge數目num<1,則Impossible,若num>1,則Can not determine,若num=1,則其為judge,但需要輸出判斷其為judge的最小的line,其實也就是其它非judge判斷為非judge的邊line的最大值,這里有點巧妙。
其余的就和食物鏈一樣了,x->y=-1(<),0(=),1(>),且 x->z=(x->y+y->z+4)%3-1,公式自己手動算一下就明白了。
AC代碼:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 struct node{ 6 int x,y; 7 char c; 8 }a[2005]; 9 10 int n,m,root[505],f[505],ans[505],res,num; 11 12 int getr(int k){ 13 if(root[k]==k) return k; 14 else{ 15 int tmp=root[k]; 16 root[k]=getr(root[k]); 17 f[k]=(f[k]+f[tmp]+4)%3-1; 18 return root[k]; 19 } 20 } 21 22 int main(){ 23 while(~scanf("%d%d",&n,&m)){ 24 if(!m){ 25 if(n==1) 26 printf("Player 0 can be determined to be the judge after 0 lines\n"); 27 else 28 printf("Can not determine"); 29 continue; 30 } 31 memset(ans,0,sizeof(ans)); 32 num=0; 33 for(int i=1;i<=m;++i) 34 scanf("%d%c%d",&a[i].x,&a[i].c,&a[i].y); 35 for(int i=0;i<n;++i){ 36 bool flag=true; 37 for(int j=0;j<n;++j) 38 root[j]=j,f[j]=0; 39 for(int j=1;j<=m;++j){ 40 if(a[j].x!=i&&a[j].y!=i){ 41 int t1=a[j].x,t2=a[j].y,t3,r1,r2; 42 if(a[j].c=='<') t3=-1; 43 else if(a[j].c=='=') t3=0; 44 else t3=1; 45 r1=getr(t1),r2=getr(t2); 46 if(r1==r2){ 47 if(f[t1]!=(t3+f[t2]+4)%3-1){ 48 ans[i]=j; 49 flag=false; 50 break; 51 } 52 } 53 else{ 54 root[r2]=r1; 55 f[r2]=(-((t3+f[t2]+4)%3-1)+f[t1]+4)%3-1; 56 } 57 } 58 } 59 if(flag) 60 ++num,res=i; 61 } 62 if(num<1) 63 printf("Impossible\n"); 64 else if(num>1) 65 printf("Can not determine\n"); 66 else{ 67 int Max=0; 68 for(int i=0;i<n;++i) 69 if(ans[i]>Max) 70 Max=ans[i]; 71 printf("Player %d can be determined to be the judge after %d lines\n",res,Max); 72 } 73 } 74 return 0; 75 }?
轉載于:https://www.cnblogs.com/FrankChen831X/p/10659338.html
總結
以上是生活随笔為你收集整理的poj2912(带权并查集+枚举)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里重磅发布大规模图神经网络平台AliG
- 下一篇: 抓取猫眼电影top100的正则、bs4、