1. 程式人生 > >bzoj1059: [ZJOI2007]矩陣遊戲(二分圖匹配)

bzoj1059: [ZJOI2007]矩陣遊戲(二分圖匹配)

AI .com str php print 組成 line ems set

1059: [ZJOI2007]矩陣遊戲

題目:傳送門

題解:

   為了趕上蘇大佬的光速的腳步...刷了題水題,不過蘇大佬好像一早就搞定了,所以也沒有什麽關系了對吧!

   其實說水題的話還不能完全算是,但如果要是發散一下思維很容易就精A:

   因為對於同一列或者同一行的棋子來說,不論如何變化,始終都在同一列或者同一行。

   那麽如果能夠組成對角線,那只要找到n個不能同行也不能同列的棋子就ok啊。

   再細想一下,解法就是公牛母牛配啊

代碼:

 1 #include<cstdio>
 2 #include<cstring>
 3 using
namespace 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]矩陣遊戲(二分圖匹配)