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.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...
随机推荐
- SYSBIOS学习笔记---线程(Threads)
在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流.线程是一个能够调用一个函数或者中断服务程序的单点控制.在sysbios系统中一共有硬件中断(HWI).软件中断(SWI).任务(Task) ...
- LLDP协议、STP协议 笔记
参考: 数据链路层学习之LLDP 生成树协议 LLDP协议.STP协议 笔记 LLDP 提出背景: 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加 ...
- 03_Kafka集群操作
1.集群配置思路 1)每台节点上要启动一个broker进程,因此要配置每台的server.properties broker id, log.dirs, zookeeper.connect 2) 每台 ...
- Codeforces Beta Round #94 div2 D 优先队列
B. String time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- poj 3468 A Simple Problem with Integers 线段树加延迟标记
A Simple Problem with Integers Description You have N integers, A1, A2, ... , AN. You need to deal ...
- shell 清空指定大小的日志文件
#!/bin/bash # 当/var/log/syslog大于68B时 if ! [ -f /var/log/syslog ] then echo "file not exist!&quo ...
- python 元组元素反转
#create a tuple x = ("w3resource") # Reversed the tuple y = reversed(x) print(tuple(y)) #c ...
- quality center 支持的平台
- STL__size_t, ptrdiff_t, size_type, difference_type
http://blog.csdn.net/zhaowei123191/article/details/5617559 ize_t 是unsigned类型, 用于指明数组长度或下标,它必须是一个正数,s ...
- 自定义 Maven 的 repositories
有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到.此时,就需要 自定义Maven的repositor ...