题目链接:

  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 (多重匹配)的更多相关文章

  1. HDU 5352——MZL's City——————【二分图多重匹配、拆点||网络流||费用流】

    MZL's City Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. HDU 5352 MZL's City (2015 Multi-University Training Contest 5)

    题目大意: 一个地方的点和道路在M年前全部被破坏,每年可以有三个操作, 1.把与一个点X一个联通块内的一些点重建,2.连一条边,3.地震震坏一些边,每年最多能重建K个城市,问最多能建多少城市,并输出操 ...

  3. 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 ...

  4. HDU 5352 MZL's City

    最小费用最大流,因为要控制字典序,网络流控制不好了...一直WA,所以用了费用流,时间早的费用大,时间晚的费用少. 构图: 建立一个超级源点和超级汇点.超级源点连向1操作,容量为K,费用为COST,然 ...

  5. hdu 3605 Escape 二分图的多重匹配(匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others)    ...

  6. HDU 3605 Escape(二分图多重匹配问题)

    Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  7. HDU(3605),二分图多重匹配

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others)    ...

  8. hdu 1669(二分+多重匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...

  9. HDU 1669 Jamie's Contact Groups(多重匹配+二分枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 题目大意: 给你各个人可以属于的组,把这些人分组,使这些组中人数最多的组人数最少,并输出这个人数 ...

随机推荐

  1. Java调用WSDL接口

    1.首先准备jar包: 2.代码调用如下: String url="url地址"; QName qName=new QName("命名空间","接口名 ...

  2. 第五讲:使用html5中的canvas动态画出物理学上平抛运动

    <html> <head> <title>平抛运动</title> <script src="../js/jscex.jscexRequ ...

  3. 【求建议】毕业之声——信院IT类毕业学子经验分享交流会

    一:缘由 在和非常多学子交流,及上课的经历中,发现一个非常普遍的现象:部分大一学生即失去了对学习.对专业的兴趣.有人在迷茫之后奋起直追.从而珍惜利用不多的大学时光努力提高自己.有人在迷茫中沉沦,沉迷于 ...

  4. PHP swfupload图片上传实例

    swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...

  5. MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程

    对Struts.spring.hibernate大体上了解一遍后,就是针对这个几个框架的整合了. 怎样整合,请看以下: 第一:Struts2的jar和xml配置文件: jar包: commons-fi ...

  6. 开发Nodejs(rest框架)版本的百度新闻系统--开发环境配置

    项目介绍:配置好开发环境,制作前端百度新闻界面,后台开发成Nodejs版本,做成做成rest风格API形式搭载mysql,使用Bootstrap搭建后台页面,完成对新闻的增删改查功能,利用Ajax配合 ...

  7. anaconda中新rdkit安装

    1. 执行 conda create -c rdkit -n my-rdkit-env rdkit 该步骤经测试发现需FQ,而模拟器无法完成FQ(至少我不知道方法), 因此在本机上配置好环境后复制粘贴 ...

  8. POI异步导入Excel兼容xsl和xlsx

    项目架构:spring+struts2+hibernate4+oracle 需求:用户导入excel文件,导入到相应的数据表中,要求提供导入模板,支持xls和xlsx文件 思路分析: 1.提供一个下载 ...

  9. Hbase权限配置以及使用手册

    1.Hbase权限控制简介 Hbase的权限控制是通过AccessController Coprocessor协处理器框架实现的,可实现对用户的RWXCA的权限控制. 2.配置 配置hbase-sit ...

  10. hdfs对namenode format 之后 应该首先检查内存消耗情况,以判断是否支持开启yarn

    http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml  3.0.0 yarn.sc ...