BZOJ2893: 征服王
题解:
裸的上下界最小流是有问题的。
因为在添加了附加源之后求出来的流,因为s,t以及其它点地位都是平等的。
如果有一个流经过了s和t,那么总可以认为这个流是从s出发到t的满足题意的流。
既然可能存在s到t的流,那么也可能会存在不经过s和t的流,而这是一条环流!!起点不是s,也不是t!显然不满足题意!!!
为了避免环流的出现,我们只好缩点。。。(本来想偷懒不缩的。。。)
所以整个算法就是缩点之后上下界最小流。
代码:无压力rank1了。。。
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 100000+5
#define maxm 100000+5
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define for4(i,x) for(int i=head[x],y;i;i=e[i].next)
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m,s,t,ss,tt,T,a[maxn],b[maxn],maxflow,tot=,head[maxn],cur[maxn],h[maxn],in[maxn];
queue<int>q;
struct edge{int go,next,v;}e[maxm];
inline void add(int x,int y,int v)
{
e[++tot]=(edge){y,head[x],v};head[x]=tot;
e[++tot]=(edge){x,head[y],};head[y]=tot;
}
inline void ins(int x,int y)
{
e[++tot]=(edge){y,head[x],};head[x]=tot;
}
inline void insert(int x,int y,int l,int r)
{
in[y]+=l;in[x]-=l;add(x,y,r-l);
}
void build()
{
for0(i,tt)if(in[i]>)add(ss,i,in[i]);else if(in[i]<)add(i,tt,-in[i]);
}
bool bfs()
{
for(int i=;i<=tt;i++)h[i]=-;
q.push(s);h[s]=;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next)
if(e[i].v&&h[e[i].go]==-)
{
h[e[i].go]=h[x]+;q.push(e[i].go);
}
}
return h[t]!=-;
}
int dfs(int x,int f)
{
if(x==t) return f;
int tmp,used=;
for(int i=cur[x];i;i=e[i].next)
if(e[i].v&&h[e[i].go]==h[x]+)
{
tmp=dfs(e[i].go,min(e[i].v,f-used));
e[i].v-=tmp;if(e[i].v)cur[x]=i;
e[i^].v+=tmp;used+=tmp;
if(used==f)return f;
}
if(!used) h[x]=-;
return used;
}
void dinic()
{
maxflow=;
while(bfs())
{
for (int i=;i<=tt;i++)cur[i]=head[i];maxflow+=dfs(s,inf);
}
}
int ti,u[maxn],v[maxn],low[maxn],dfn[maxn],cnt,scc[maxn],top,sta[maxn];
int minflow()
{
s=ss;t=tt;
dinic();
if(maxflow!=cnt)return -;
int ans=e[tot].v;
e[tot].v=e[tot^].v=;
s=cnt+cnt+;t=;
dinic();
return ans-maxflow;
}
inline void tarjan(int x)
{
sta[++top]=x;low[x]=dfn[x]=++ti;
for4(i,x)if(!dfn[y=e[i].go])
{
tarjan(y);
low[x]=min(low[x],low[y]);
}else if(!scc[y])low[x]=min(low[x],dfn[y]);
if(low[x]==dfn[x])
{
cnt++;
for(int y=;y!=x;)scc[y=sta[top--]]=cnt;
}
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
T=read();
while(T--)
{
memset(head,,sizeof(head));tot=;cnt=;
memset(in,,sizeof(in));
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(scc,,sizeof(scc));
n=read();m=read();a[]=read();b[]=read();
for1(i,a[])a[i]=read();
for1(i,b[])b[i]=read();
for1(i,m){u[i]=read();v[i]=read();ins(u[i],v[i]);}
for1(i,n)if(!dfn[i])tarjan(i);
s=;t=cnt+cnt+;ss=t+;tt=t+;
memset(head,,sizeof(head));tot=;
for1(i,cnt)insert(i,i+cnt,,inf);
for1(i,a[])insert(s,scc[a[i]],,inf);
for1(i,b[])insert(scc[b[i]]+cnt,t,,inf);
for1(i,m)if(scc[u[i]]!=scc[v[i]])insert(scc[u[i]]+cnt,scc[v[i]],,inf);
build();
insert(t,s,,inf);
int x=minflow();
if(x==-)printf("no solution\n");else printf("%d\n",x);
}
return ;
}
2893: 征服王
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 64 Solved: 17
[Submit][Status]
Description
process中,要想使雪菜回到正常状态,需要纳米机器人的帮助。纳米机器人可以从任意一个可以作为起点的块落出发进行修复,也可以在任意一个可以作为
终点的块落结束修复(并不是到了某个终点就一定要停止)。春希希望所有的节点都能被修复(只要纳米机器人到过该点就算修复过),这样才能让雪菜重获新生。
Input
Output
Sample Input
2 1 1 1
1
2
2 1
3 2 3 3
1 2 3
1 2 3
1 2
1 3
Sample Output
2
【数据规模和约定】
对于30%的数据,满足n <= 10, m <= 100。
对于60%的数据,满足n <= 200, m <= 5000。
对于100%的数据,满足t<=10,n <= 1000, m <= 10000。
BZOJ2893: 征服王的更多相关文章
- BZOJ2893:征服王(费用流)
Description 虽然春希将信息传递给了雪菜,但是雪菜却好像完全不认得春希了.心急如焚的春希打开了第二世代机能,对雪菜的脑内芯片进行了直连-hack. 进入到雪菜内部的春希发现(这什么玩意..) ...
- 【BZOJ-2893】征服王 最大费用最大流(带下界最小流)
2893: 征服王 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 48[Submit][Status][Discuss] D ...
- 【bzoj2893】征服王
Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个 ...
- SDOI2017 Round1
SDOI2017 Round1 在回去的车上写的 cnblog的markdown貌似有bug,空行都没有了 Day -several [清明节] 没想到在省选之前还会有一次放假 放假前一天晚上走到校门 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 安晓辉大神的感悟:如果你发现了自己的学习模式,愿意学并且能坚持,我觉得没什么能阻挡你征服软件世界的脚步(对于开发人员来讲,最大的风险是:在职业规划上没有延续性地乱跳槽。时刻要牢记在心的:培养自己的稀缺性) good
从技术支持中途转战软件开发,如今从事编程工作已十多有余,2014年CSDN博文大赛编程语言组冠军.CSDN Qt论坛的版主安晓辉老师从今天开始,坐镇CSDN社区问答栏目的 第十四期,届时会接受广大网友 ...
- 彻底征服 Spring AOP 之 理论篇
基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...
- BZOJ 4008 【HNOI2015】 亚瑟王
题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我 ...
- Bzoj4008 [HNOI2015]亚瑟王
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1009 Solved: 605[Submit][Status] ...
随机推荐
- H264相关代码
H.264格式的视频打包成RTP后进行发送,编译环境为VC6++ #include <stdio.h> #include <stdlib.h> #include <str ...
- Android 管理Activity中的fragments
为了管理Activity中的fragments,需要使用FragmentManager,为了得到它,需要调用Activity中的getFragmentManager()方法,接下来详细介绍,感兴趣的朋 ...
- oracle linux了解基本命令行
1. Linux的版本:核心(kernel)版本和发行(distribution)版本 2. 复制.删除和移动文件的命令 cp [选项] 源文件或目录 目标文件或目录 -R,-r ...
- 请给出一个左侧定宽右侧自适应的HTML结构及样式
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- 【BZOJ 1085】 [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- 【BZOJ3196】Tyvj 1730 二逼平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的 ...
- bnuoj 20834 Excessive Space Remover(水水)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=20834 [题意]: 每次减少一半的空格,问经过多少次操作能得到每个单词之间的空格为1,输入字符串大小 ...
- 【链表】bzoj 1150: [CTSC2007]数据备份Backup
1150: [CTSC2007]数据备份Backup Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1136 Solved: 458[Submit] ...
- PAT-乙级-1040. 有几个PAT(25)
1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 字符串APPAPT中包含了两个单 ...
- [BEC][hujiang] Lesson02 Unit1:Working life ---Reading
2 1.1Working Life p7 reading attitudes to work Question6: 对于Attitude问题 1 I be willing/ unwilling to ...