HDU 5352 MZL's City (2015 Multi-University Training Contest 5)
题目大意:
一个地方的点和道路在M年前全部被破坏,每年可以有三个操作, 1.把与一个点X一个联通块内的一些点重建,2.连一条边,3.地震震坏一些边,每年最多能重建K个城市,问最多能建多少城市,并输出操作要让字典序最小
思路:
trivial:显然每年向当年可以建的城市连边,每年可以匹配最多K个城市,嗯,很明显的网络流思路,可这样方案数不太好输出
full:再仔细想想这就是多对一的多重匹配,跑一跑匈牙利就可以,K个城市可以拆点,当然简单的方法直接跑K次也可以(想一想为什么)
为了字典序最小,我们要尽量让后面的点匹配,所以从后往前跑匹配就可以
// i love zxr
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10009
using namespace std;
int matrix[][];
int nex[maxn],head[maxn],point[maxn],now;
int mark[maxn],deg[maxn],ans[maxn];
int visit[maxn],x,y,match[maxn],o,p,n,m,k,h
;
void add(int x,int y)
{
nex[++now] = head[x];
head[x] = now;
point[now] = y;
} int dfs1(int k,int year)
{
visit[k]=;
add(year,k);
for(int i=;i<=n;i++)if(matrix[k][i]== && !visit[i])dfs1(i,year);
} int dfs(int k)
{
for(int i=head[k];i;i=next[i])
{
int u = point[i];
if(visit[u])continue;
visit[u]=;
if(match[u]==- || dfs(match[u]))
{
match[u] = k;
return ;
}
}
return ;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
h=;
memset(matrix,,sizeof(matrix));
memset(head,,sizeof(head));
memset(mark,,sizeof(mark));
now=;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
{
scanf("%d",&o);
if(o==)
{
scanf("%d",&x);
memset(visit,,sizeof(visit));
dfs1(x,i);
mark[i]=;
}
if(o==)
{
scanf("%d%d",&x,&y);
matrix[x][y] = ;
matrix[y][x] = ;
}
if(o==)
{
scanf("%d",&p);
for(int i=;i<=p;i++)
{
scanf("%d%d", &x, &y);
matrix[x][y] = ;
matrix[y][x] = ;
}
}
}
int an=;
memset(match,-,sizeof(match));
for(int i=m;i>=;i--)if(mark[i])
{
int u =;
for(int j=;j<=k;j++)
{
memset(visit,,sizeof(visit));
if(dfs(i))u++;
}
an+=u;
ans[++h]=u;
}
printf("%d\n",an);
for(int i=h;i>=;i--)
{
printf("%d ",ans[i]);
}
if(h)printf("%d\n",ans[]);
}
return ;
}
HDU 5352 MZL's City (2015 Multi-University Training Contest 5)的更多相关文章
- Hdu 5352 MZL's City (多重匹配)
题目链接: Hdu 5352 MZL's City 题目描述: 有n各节点,m个操作.刚开始的时候节点都是相互独立的,一共有三种操作: 1:把所有和x在一个连通块内的未重建过的点全部重建. 2:建立一 ...
- 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——————【二分图多重匹配、拆点||网络流||费用流】
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 6141 - I am your Father! | 2017 Multi-University Training Contest 8
思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...
- hdu 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6406 思路: 暴力,预处理三个前缀和:[1,n]桃子会被摘掉,1到当前点的最大值,1到当前点被摘掉的桃子的 ...
- hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3 A)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=6319 思路: 单调队列倒着维护,队列里面剩下的值的数量就是这一段区间的count值,如样例第一个区间:3 ...
- HDU 4946 Area of Mushroom(2014 Multi-University Training Contest 8)
思路: 只有速度最大才有可能为1,速度不是最大肯定为0,那么就是 只需要操作那些速度最大的点,这些点求一个凸包,判断一下是不是在凸包边上即可. 有几个需要注意的地方: 1.最大速度如果为0 那么肯 ...
- HDU 4939 Stupid Tower Defense (2014 Multi-University Training Contest 7)
思路:首先红色肯定要放在最后面.前面蓝色和绿色dp求解. dp[i][j] 表示前面(i+j) 个 有 i 个蓝色塔 j个绿色塔 能造成最大伤害. //====================== ...
随机推荐
- 覆盖alert对话框-自制Jquery.alert插件
Javascript 代码: (function ($) { 'use strict'; window.alert = $.alert = function (msg) { var defaultOp ...
- poj3264 划分树
题意: 给定一个序列,询问区间中最大数减去最小数的结果 和2104差不多, 代码贴过来就OK了 #include <iostream> #include <algorithm> ...
- 计算机图形学(Conputer Graphics):非均匀有理B样条
计算机图形学(Conputer Graphics):非均匀有理B样条 非均匀有理B样条(Non-Uniform Rational B-Spline)英文缩写,NURBS. 它是贝塞尔曲线的一个推广,而 ...
- shell脚本自动部署及监控
一.shell脚本部署nginx反向代理和三个web服务 1 对反向代理服务器进行配置 #!/bin/bash #修改用户交互页面 用户输入参数执行相应的参数 #安装epel扩展包和nginx fun ...
- 安装vc++6.0的步骤
我们学习计算机,就必须要先将编程的c语言学好,打好基础,学习c语言最好的方法就是多上机联系,对于联系我们需要在自己的电脑上安装vc++6.0来进行平日里的联系.1.打开电脑进行联网,打开浏览器搜索vc ...
- [BZOJ2938]病毒 (AC自动机+dfs)
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- javase(8)_集合框架_List、Set、Map
一.集合体系(不包括Queue体系) 二.ArrayList ArrayList的属性 private transient Object[] elementData; //存储元素 private i ...
- Lazy Instantiator
lazy instantiator (懒加载.延迟实例化.延迟初始化) 最开始看斯坦福的视频,对 延迟初始化 这个概念,不太理解 只见到,有些属性的初始化是在init做的,有些是在viewDidLoa ...
- ios之UIActivityIndicatorView
UIActivityIndicatorView和UIProgressView都继承自UIView,所以他们可以附属在其他视图上.UIActivityIndicatorView是一个进度提示器,显示一个 ...
- 使用Spring Cloud需要了解一些概念
Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具,它为基于JVM的微服务开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集 ...