标签:des style blog http color io os 使用 ar
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1602 Accepted Submission(s): 606
1 const int MAXN = 510; 2 int uN,vN;//u,v的数目,使用前面必须赋值 3 int g[MAXN][MAXN];//邻接矩阵 4 int linker[MAXN]; 5 bool used[MAXN]; 6 #include <memory.h> 7 bool dfs(int u) 8 { 9 for(int v = 0; v < vN; v++) 10 if(g[u][v] && !used[v]) 11 { 12 used[v] = true; 13 if(linker[v] == -1 || dfs(linker[v])) 14 { 15 linker[v] = u; 16 return true; 17 } 18 } 19 return false; 20 } 21 int hungary() 22 { 23 int res = 0; 24 memset(linker,-1,sizeof(linker)); 25 for(int u = 0; u < uN; u++) 26 { 27 memset(used,false,sizeof(used)); 28 if(dfs(u))res++; 29 } 30 return res; 31 } 32 33 #include <iostream> 34 #include <stdio.h> 35 #include <string.h> 36 using namespace std; 37 38 39 int getint(char s[]) 40 { 41 int ans=0; 42 for(int i=0; i<strlen(s); i++) 43 { 44 ans=ans*10+s[i]-‘0‘; 45 } 46 return ans; 47 } 48 49 typedef pair<int,int> CPair; 50 51 CPair upair[510],vpair[510]; 52 int main() 53 { 54 #ifndef ONLINE_JUDGE 55 freopen("in.txt","r",stdin); 56 #endif // ONLINE_JUDGE 57 int T; 58 cin>>T; 59 while(T--) 60 { 61 memset(g,0,sizeof g); 62 int nc,nd,n; 63 uN=vN=0; 64 scanf("%d%d%d",&nc,&nd,&n); 65 for(int i=0; i<n; i++) // 人的数量 66 { 67 char s1[20],s2[20]; 68 scanf("%s%s",s1,s2); // C1 D1 69 int ci=getint(s1+1),di=getint(s2+1); 70 if(s1[0]==‘C‘) 71 { 72 // 放到第一个集合 73 upair[uN++]=CPair(ci,di); 74 } 75 else 76 { 77 vpair[vN++]=CPair(ci,di); 78 } 79 } 80 // 构图 81 for(int i=0;i<uN;i++) 82 for(int j=0;j<vN;j++) 83 { 84 // 矛盾的话就连一条边 85 if(upair[i].first==vpair[j].second || upair[i].second==vpair[j].first) 86 g[i][j]=1; 87 } 88 89 int ans=uN+vN-hungary(); 90 printf("%d\n",ans); 91 } 92 return 0; 93 }
标签:des style blog http color io os 使用 ar
原文地址:http://www.cnblogs.com/oneshot/p/4013822.html