标签:memset sed printf ems map -- ring string for
一开始还以为是DP什么的,但是瞄了眼讨论区发现好像可以建模成二分图匹配。
于是乎瞎造了几组数据手动模拟了下,发现只要最后匹配数量>=n就有解。
Orz 还是自己太弱,不能一眼看出算法去建模。
话说这道题目和ZJOI2009那道题目差不多 难在看出实质去建模
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 5 int T,n; 6 int Map[205][205],State[205]; 7 bool used[205]; 8 9 bool find(int x){ 10 for(int i=1;i<=n;i++){ 11 if(!used[i] && Map[x][i]){ 12 used[i]=1; 13 if(find(State[i]) || !State[i]){ 14 State[i]=x; 15 return true; 16 } 17 } 18 } 19 return false; 20 } 21 22 int main(){ 23 scanf("%d",&T); 24 while(T--){ 25 int tot = 0; 26 memset(State,0,sizeof(State)); 27 memset(Map,0,sizeof(Map)); 28 scanf("%d",&n); 29 for(int i=1;i<=n;i++){ 30 for(int j=1;j<=n;j++){ 31 int x; 32 scanf("%d",&x); 33 if(x==1) Map[i][j]=1; 34 } 35 } 36 for(int i=1;i<=n;i++){ 37 memset(used,0,sizeof(used)); 38 if(find(i)) tot++; 39 } 40 if(tot>=n){ 41 printf("Yes\n"); 42 } 43 else printf("No\n"); 44 } 45 return 0; 46 }
标签:memset sed printf ems map -- ring string for
原文地址:http://www.cnblogs.com/OIerLYF/p/7496073.html