bzoj1059: [ZJOI2007]矩陣遊戲(二分圖匹配)
阿新 • • 發佈:2018-03-04
AI .com str php print 組成 line ems set
1059: [ZJOI2007]矩陣遊戲
題目:傳送門
題解:
為了趕上蘇大佬的光速的腳步...刷了題水題,不過蘇大佬好像一早就搞定了,所以也沒有什麽關系了對吧!
其實說水題的話還不能完全算是,但如果要是發散一下思維很容易就精A:
因為對於同一列或者同一行的棋子來說,不論如何變化,始終都在同一列或者同一行。
那麽如果能夠組成對角線,那只要找到n個不能同行也不能同列的棋子就ok啊。
再細想一下,解法就是公牛母牛配啊
代碼:
1 #include<cstdio> 2 #include<cstring> 3 usingnamespace std; 4 int f[1100]; 5 int n,m,ans; 6 bool map[510][510]; 7 bool c[510]; 8 bool find_muniu(int x) 9 { 10 for(int j=1;j<=n;j++) 11 if(map[x][j]) 12 if(c[j]==true) 13 { 14 c[j]=false; 15 if(f[j]==0 || find_muniu(f[j]))16 { 17 f[j]=x; 18 return true; 19 } 20 } 21 return false; 22 } 23 int main() 24 { 25 int T; 26 scanf("%d",&T); 27 while(T--) 28 { 29 scanf("%d",&n); 30 memset(map,false,sizeof(map)); 31 for(int i=1;i<=n;i++) 32 for(int j=1;j<=n;j++) 33 scanf("%d",&map[i][j]); 34 int ans=0; 35 memset(f,0,sizeof(f)); 36 for(int i=1;i<=n;i++) 37 { 38 memset(c,true,sizeof(c)); 39 if(find_muniu(i)==true)ans++; 40 } 41 if(ans<n)printf("No\n"); 42 else printf("Yes\n"); 43 } 44 return 0; 45 }
bzoj1059: [ZJOI2007]矩陣遊戲(二分圖匹配)