UVALive 6322 最大匹配...
/*
*e...大概明白了。首先用最大匹配看看是不是存在符合题意的匹配。然后呢。对枚举找到每个位置符合的字母里最小的那个。
*判断是否能构成最大匹配。直到找完最后一个位置输出就好了。、
*还是有些不理解最大匹配匈牙利算法的过程。而且这个题是最大匹配。也没想到。
*/
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 110 int g[N][N]; // 图的存储方式。矩阵。
int n; //二分图两个顶点集 本题个数相等
int vis[N]; //判断V2中的点是否已经被搜索过。一次寻找最大匹配中.
int viss[N]; // 判断V2中的点是不是已经被匹配到其它位置。所有的最大匹配过程都包括。
int link[N]; // 记录V2中的点和谁匹配了。
int m; // 最大匹配数;
int len; // 还未匹配的长度
char str[N], s[N];
int ans[N]; //保存每个位置匹配的字符对应的位置。 void init()
{
memset(vis, , sizeof(vis));
memset(viss, , sizeof(viss));
memset(link, , sizeof(link));
memset(g, , sizeof(g));
memset(ans, , sizeof(ans));
m = ;
} void build()
{
cin >> str+;
n = strlen(str+);
sort(str+, str++n);
for (int i=; i<=n; ++i)
{
cin >> s;
int len2 = strlen(s);
for (int j=; j<=n; ++j)
{
for (int k=; k<len2; ++k)
{
if (str[j] == s[k])
g[i][j] = ; // 建图。我没想到这样建。
}
}
}
} int dfs(int x)
{
for (int y=; y<=n; ++y)
{
if (g[x][y] && !vis[y] && !viss[y]) // 如果x和y有边。而且y未被搜索和匹配.
{
vis[y] = ; // 标记已被搜索过.
if (link[y] == || dfs(link[y])) //如果y未被匹配。或者y匹配的节点可以找到增广路。(为什么这也算是匹配成功呢。那和这个节点匹配的怎么办)
{
link[y] = x; //当前匹配成功。
return ;
}
}
}
return ;
} void max_m()
{
for (int x=; x<=n; ++x)
{
memset(vis, , sizeof(vis)); // 清空上次搜索时的标记。
if (dfs(x))
m++;
}
return ;
} int match()
{
int anss = ;
memset(link, , sizeof(link));
for (int x=; x<=n; ++x)
{
if (ans[x]) continue;
memset(vis, , sizeof(vis));
if (dfs(x)) anss++;
}
return anss == len;
} int main()
{
int t;
cin >> t;
while(t--)
{
init();
build();
max_m();
if (m < n)
{
cout << "NO SOLUTION\n";
continue;
}
len = n;
for (int i=; i<=n; ++i) // 遍历每个位置的最小字符 用最大匹配判断是否可行。
{
for (int j=; j<=n; ++j)
{
if (!viss[j] && g[i][j]) // 没有被其它位置匹配。而且和当前位置有边。
{
ans[i] = j;
len--;
viss[j] = ;
if (match()) break; // 当前位置成功。继续匹配下一个位置。
viss[j] = ; //如果不成功。回溯。
len++;
}
}
}
for (int x=; x<=n; ++x)
{
cout << str[ans[x]];
}
cout << endl;
}
return ;
}
LOoK
UVALive 6322 最大匹配...的更多相关文章
- HDU 3279 二分图最大匹配
DES: 就是说对每个人都给你一个区间.但一个人只匹配一个数.问你满足匹配的人的序号字典序最大时的最大匹配是什么. 前几天刚做的UVALive 6322...当然是不一样的...那个要求的最大匹配的个 ...
- Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配
/** 题目:Taxi Cab Scheme UVALive - 3126 最小路径覆盖解法(必须是DAG,有向无环图) = 结点数-最大匹配 链接:https://vjudge.net/proble ...
- Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
/** 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游 链接:https://vjudge.net/problem/UVA ...
- UVALive 5033 I'm Telling the Truth 二分图最大匹配(略有修改)
I - I'm Telling the Truth Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- UVALive 6887 Book Club 最大流解最大匹配
题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- UVALive 2523 Machine Schedule(二分图求最大匹配数)
题意:有两台机器,上面有多个工作区域,有多个任务,分别可以在两台机器的某一个区域上完成,两台机器一开始都在0区域上工作,每次更改区域,都会重新启动一次,让我们求出最小的重启次数. 思路:将两个区域连线 ...
- UVaLive 6525 Attacking rooks (二分图最大匹配)
题意:给定一个 n * n的图,X是卒, . 是空位置,让你放尽量多的车,使得他们不互相攻击. 析:把每行连续的 . 看成X集体的一个点,同理也是这样,然后求一个最大匹配即可. 代码如下: #prag ...
- [ An Ac a Day ^_^ ] UVALive 2635 Housing Complexes 二分图最大匹配
快要比赛了 看看原来做过的题 感觉这道题当时做的还是挺费劲的 所以发一下 题意: 一个土豪要建别墅 因为有的地区地方不够大 所以要拆屋子 每个地方的字母就是对应开发商的地盘 没有字母的就是自由土地 一 ...
- HDU 5093 Battle ships(二分图最大匹配)
题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...
随机推荐
- luogu3935 Calculating
标题也许叫整除分块吧 求\(1\)到\(n\)因数的个数\(\sum_{i=1}^n(\sum_{d|n}1)\) 范围\(1e14\)时限3s \(n\sqrt{n}\)的暴力铁定gg 分开考虑 \ ...
- 使用CLR Profiler查看C#运行程序的内存占用情况
http://blog.csdn.net/wy3552128/article/details/8158938 https://msdn.microsoft.com/en-us/library/ff65 ...
- Spring batch的学习
Spring batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式. Spring batch主要有以下部分组成: JobRepository ...
- HDU 6127 Hard challenge(扫描线)
http://acm.hdu.edu.cn/showproblem.php?pid=6127 题意: 有n个点,每个点有一个$(x,y)$坐标和一个权值,任意两点之间都有连线,并且连线的权值为两个顶点 ...
- HDU 1686 Oulippo
http://acm.hdu.edu.cn/showproblem.php?pid=1686 题意:给定一个文本串和给定一个模式串,求文本串中有几个模式串. 思路:直接套用KMP模板. #includ ...
- Python的collections模块中的OrderedDict有序字典
如同这个数据结构的名称所说的那样,它记录了每个键值对添加的顺序. ? 1 2 3 4 5 6 d = OrderedDict() d['a'] = 1 d['b'] = 10 d['c'] = 8 f ...
- python 处理命令行参数--转载
标题写了那么久,现在现在才有时间,整理下自己的思路.首先先总结下自己对sys模块的理解.手册上对sys的描述是系统参数和系统函数,这里的系统实际上是python解释器.这个模块提供了用户可以访问的解释 ...
- BZOJ 2339 【HNOI2011】 卡农
题目链接:卡农 听说这道题是经典题? 首先明确一下题意(我在这里纠结了好久):有\(n\)个数,要求你选出\(m\)个不同的子集,使得每个数都出现了偶数次.无先后顺序. 这道题就是一道数学题.显然我们 ...
- js 二进制转换为16进制数
<!DOCTYPE html> <html> <head> <title>远程监控</title> </head> <bo ...
- 获取本机ip的shell脚本
ifconfig br0 | grep 'inet addr' | sed 's/^.*addr://g' |sed 's/ Bcast:.*$//g' 注意:br0为网卡名称,需要改成你使用的网卡名 ...