Hdu 5352 MZL's City (多重匹配)
题目链接:
题目描述:
有n各节点,m个操作。刚开始的时候节点都是相互独立的,一共有三种操作:
1:把所有和x在一个连通块内的未重建过的点全部重建。
2:建立一条双向路(x,y)
3:又发生了地震,p条路被毁。
问最后最多有多少个节点被重建,输出重建节点的最小字典序。
解题思路:
这几天正好在学匹配,但是昨天下午还是没有看出来这个是匹配题目。看了题解扪心自问了自己三次,是不是傻。就是把每个需要重建的节点x拆成k个点,然后对每个拆分后的点和与拆点在同一连通块里面的点建边,然后按照倒序进行匹配,保证字典序最大。
但是匹配好像要比网络流慢好多,改天还是去学一下新姿势的好。
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = ;
const int N = *;
vector <int> G[N];
int ans[maxn*], p[maxn], used[maxn], vis[maxn];
int n, m, k, num, nu, maps[maxn][maxn];
void dfs (int u)
{//求连通块内的点
vis[u] = ;
p[num ++] = u;
for (int i=; i<=n; i++)
if (!vis[i] && maps[u][i])
dfs (i);
}
bool Find (int u)
{
for (int i=; i<G[u].size(); i++)
{
int v = G[u][i];
if (!vis[v])
{
vis[v] = ;
if (!used[v] || Find(used[v]))
{
used[v] = u;
return true;
}
}
}
return false;
}
int hungry ()
{
int res = ;
memset (used, , sizeof(used));
for (int i=nu-; i>=; i--)//倒序求最大匹配
for (int j=i*k; j<(i+)*k; j++)
{
memset (vis, , sizeof(vis));
if (Find(j))
{
res ++;
ans[i] ++;
}
}
return res;
}
int main ()
{
int t;
scanf ("%d", &t);
while (t --)
{
scanf ("%d %d %d", &n, &m, &k);
memset (maps, , sizeof(maps));
for (int i=; i<N; i++)
G[i].clear();
nu = ;
while (m --)
{
int type, x, y, z;
scanf ("%d", &type);
if (type == )
{
scanf ("%d", &x);
num = ;
memset (vis, , sizeof(vis));
dfs (x);
for (int i=; i<num; i++)//建边
for (int j=nu*k; j<(nu+)*k; j++)//拆点
G[j].push_back(p[i]);
nu ++;
}
else if (type == )
{
scanf ("%d %d", &x, &y);
maps[x][y] = maps[y][x] = ;
}
else
{
scanf ("%d", &z);
while (z --)
{
scanf ("%d %d", &x, &y);
maps[x][y] = maps[y][x] = ;
}
}
}
memset (ans, , sizeof(ans));
int res = hungry ();
printf ("%d\n", res);
for (int i=; i<nu; i++)
printf ("%d%c", ans[i], i==nu-?'\n':' ');
}
return ;
}
Hdu 5352 MZL's City (多重匹配)的更多相关文章
- HDU 5352——MZL's City——————【二分图多重匹配、拆点||网络流||费用流】
MZL's City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5352 MZL's City (2015 Multi-University Training Contest 5)
题目大意: 一个地方的点和道路在M年前全部被破坏,每年可以有三个操作, 1.把与一个点X一个联通块内的一些点重建,2.连一条边,3.地震震坏一些边,每年最多能重建K个城市,问最多能建多少城市,并输出操 ...
- 2015 Multi-University Training Contest 5 hdu 5352 MZL's City
MZL's City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5352 MZL's City
最小费用最大流,因为要控制字典序,网络流控制不好了...一直WA,所以用了费用流,时间早的费用大,时间晚的费用少. 构图: 建立一个超级源点和超级汇点.超级源点连向1操作,容量为K,费用为COST,然 ...
- hdu 3605 Escape 二分图的多重匹配(匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 3605 Escape(二分图多重匹配问题)
Escape Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU(3605),二分图多重匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1669(二分+多重匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...
- HDU 1669 Jamie's Contact Groups(多重匹配+二分枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 题目大意: 给你各个人可以属于的组,把这些人分组,使这些组中人数最多的组人数最少,并输出这个人数 ...
随机推荐
- Windows下SVN服务器及客户端的使用
原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...
- 关闭Windows 2003/2008中IE增强的安全配置的方法
在使用Windows Server 2003/2008操作系统时,打开IE浏览网页时,发现浏览器总提示 "是否需要将当前访问的网站添加到自己信任的站点中去",要是不信 ...
- 【Nginx】I/O多路转接之select、poll、epoll
当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种: 1.使用多进程或 ...
- [PythonCode]扫描局域网的alive ip地址
内网的主机都是自己主动分配ip地址,有时候须要查看下有那些ip在使用,就写了个简单的脚本. linux和windows下都能够用,用多线程来ping1-255全部的地址,效率不高.2分钟左右. 先凑合 ...
- 淘宝API学习之道:淘宝TOP之API接口接入教程
作为一个中小型站点开发人员,淘宝API的开放大大缩短了站点的开发周期和运作效率.面对海量的数据.开发人员仅仅要细致阅读开发文档,熟悉对应的接口,就能够把数据导入自己的站点,这样就不必望洋兴叹了. 眼下 ...
- 接口测试工具--Fiddler 的使用
代码部分 Rules -> Customize Rules 打开Fiddler ScriptEditor,这里可以通过修改脚本中某些方法( OnBeforeRequest(oSession: ...
- Android进阶图片处理之三级缓存方案
图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...
- 目标跟踪之高斯混合模型---cv实现
#include <stdio.h>#include <cv.h>#include <cxcore.h>#include <highgui.h>#inc ...
- 嵌入式linux 实现mdev SD卡和U盘自己主动挂载和卸载的方法 mdev.conf
首先先參考这些博客做一些了解:http://linux.chinaunix.net/techdoc/install/2009/11/18/1144936.shtml http://www.cnblog ...
- asp.net 实现搜索站内搜索功能
首先有index和search 两个页面 index页面中有textbox1和button1两个控件 双击button1控件添加代码: protected void Button1_Click(obj ...