UVALive 6322 最大匹配
2013-10-12 17:27
399 查看
思路:枚举每个位置的最小字符,用最大匹配判断是否可行
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> #define Maxn 1010 using namespace std; int match[Maxn],vi[Maxn],num[Maxn],g[Maxn][Maxn],f[Maxn],ch[Maxn],n,le; void init() { memset(match,-1,sizeof(match)); memset(vi,0,sizeof(vi)); memset(num,0,sizeof(num)); memset(g,0,sizeof(g)); memset(f,0,sizeof(f)); memset(ch,0,sizeof(ch)); } int dfs(int u) { int i; for(i=1;i<=n;i++) if(!f[i]&&!vi[i]&&g[u][i]){ vi[i]=1; if(match[i]==-1||dfs(match[i])){ match[i]=u; return 1; } } return 0; } int OK() { int i,ans=0; memset(match,-1,sizeof(match)); for(i=1;i<=n;i++){ if(ch[i]) continue; memset(vi,0,sizeof(vi)); if(dfs(i)) ans++; } return ans==le; } int main() { int i,j,t,l,k; char str[Maxn],s[Maxn]; scanf("%d",&t); while(t--){ init(); scanf("%s",str+1); n=strlen(str+1); sort(str+1,str+1+n); for(i=1;i<=n;i++){ scanf("%s",s); l=strlen(s); for(j=1;j<=n;j++){ for(k=0;k<l;k++){ if(str[j]==s[k]){ g[i][j]=1; //cout<<i<<" "<<j<<endl; } } } } int ans=0; for(i=1;i<=n;i++){ memset(vi,0,sizeof(vi)); if(dfs(i)) ans++; } if(ans<n){ printf("NO SOLUTION\n"); continue; } memset(match,-1,sizeof(match)); le=n; for(i=1;i<=n;i++){ for(j=1;j<=n;j++)if(!f[j]&&g[i][j]){ ch[i]=j; f[j]=1; le--; if(OK()) break; le++; f[j]=0; } } for(i=1;i<=n;i++) printf("%c",str[ch[i]]); puts(""); } return 0; }
相关文章推荐
- UVALive 6322 最大匹配...
- UVALive 5033 I'm Telling the Truth 二分图最大匹配(略有修改)
- UVa live6492Welcome Party(二分最大匹配之最小点覆盖)
- UVALive - 6887 Book Club (二分图求最大匹配||网络流求最大匹配)
- uvalive 3268 二分图匹配 或者 最大流
- Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
- UVALive 4043 Ants(二分图匹配,最大匹配,4级)
- Similarity HDU 3718||UVALive - 5013 二分图最大权匹配
- UVALive 6652 Game of Throne(一般图最大加权匹配)
- CSU 1623 Inspectors(二分图最大权匹配 KM算法)(UVAlive 6879)
- UVaLive 6525 Attacking rooks (二分图最大匹配)
- UVALive 6887 Book Club 最大流解最大匹配
- UVALive-5013 Similarity(二分图最大权匹配)
- UVa live3415Guardian of Decency(二分最大匹配之最大独立点集)
- UVALive 4043 Ants(最大权匹配)
- Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配
- UVALive - 7008 Tactical Multiple Defense System——二分图最大匹配
- UVALive - 4043 Ants (二分图最大权匹配)
- UVAlive--4529--Dangerous Tunnels(二分+拆点最大流)
- uva 12549 Sentry Robots 最大二分匹配