这题告诉我们,最小割需:满流,S断不能到T端P4126,hdoj3987

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
typedef long long lon;
const lon SZ=,SSZ=,APB=,one=;
const lon INF=0x7FFFFFFF,mod=;
int n,m,cnt,sum,head[SSZ],dep[SSZ],snum;
int S=,T=,nex[SZ],to[SZ],wt[SZ];
int vst[SSZ];
struct nd{
int x,y;
nd(int a=,int b=):x(a),y(b){}
};
nd arr[SZ]; void add(int u,int v,int w)
{
++cnt;
nex[cnt]=head[u];
head[u]=cnt;
to[cnt]=v,wt[cnt]=w;
} void init()
{
cnt=-,sum=;
memset(head,-,sizeof(head));
//cin>>n>>m>>snum;
scanf("%d%d%d",&n,&m,&snum);
for(int i=;i<=m;++i)
{
int a,b,c;
//cin>>a>>b>>c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,);
arr[i].x=a,arr[i].y=b;
}
for(int i=;i<=snum;++i)
{
int id,val;
cin>>id>>val;
add(id,T,val);
add(T,id,);
sum+=val;
}
add(S,,INF);
add(,S,);
} bool bfs()
{
memset(dep,,sizeof(dep));
dep[S]=;
queue<int> q;
q.push(S);
for(;q.size();)
{
int fr=q.front();
q.pop();
for(int i=head[fr];i!=-;i=nex[i])
{
int t=to[i],w=wt[i];
if(!dep[t]&&w)
{
dep[t]=dep[fr]+;
q.push(t);
if(t==T)return ;
}
}
}
return ;
} int dinic(int x,int flow)
{
if(x==T)return flow;
else
{
int rem=flow;
for(int i=head[x];i!=-&&rem;i=nex[i])
{
int t=to[i],w=wt[i];
if(dep[t]==dep[x]+&&w)
{
int tmp=dinic(t,min(rem,w));
if(!tmp)dep[t]=;
rem-=tmp;
wt[i]-=tmp,wt[i^]+=tmp;
}
}
return flow-rem;
}
} void dfs(int x,int p)
{
//cout<<x<<endl;
vst[x]=;
for(int i=head[x];i!=-;i=nex[i])
{
int t=to[i],w=wt[i];
if(t!=p&&w&&!vst[t])
{
dfs(t,x);
}
}
} void work()
{
int res=;
for(;bfs();)res+=dinic(S,INF);
cout<<sum-res<<endl;
dfs(S,-);
vector<int> tmp;
for(int i=;i<=m;++i)
{
//cout<<arr[i].x<<" "<<arr[i].y<<endl;
int u=arr[i].x,v=arr[i].y;
if(vst[u]&&!vst[v])
{
tmp.push_back(i);
}
}
cout<<tmp.size();
for(int i=;i<tmp.size();++i)
{
printf(" %d",tmp[i]);
}
cout<<endl;
} void release()
{
memset(vst,,sizeof(vst));
} int main()
{
//std::ios::sync_with_stdio(0);
//freopen("d:\\1.txt","r",stdin);
int casenum;
cin>>casenum;
//cout<<casenum<<endl;
for(int time=;time<=casenum;++time)
//for(int time=1;cin>>n>>m;++time)
{
printf("Case %d: ",time);
init();
work();
release();
}
return ;
}

hdoj3251的更多相关文章

随机推荐

  1. python爬虫简单的添加代理进行访问

    在使用python对网页进行多次快速爬取的时候,访问次数过于频繁,服务器不会考虑User-Agent的信息,会直接把你视为爬虫,从而过滤掉,拒绝你的访问,在这种时候就需要设置代理,我们可以给proxi ...

  2. zabbix监控实战<3> 之自定义监控实例

    第一章    自定义监控tcp状态 命令可以选择ss 或者 netstat    ss打印基于socket的统计信息,实际运行下来,ss的速度要比netstat要快得多 1.1  tcp的十一种状态 ...

  3. CentOS 7 配置DHCP

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

  4. mutex,thread

    //#include <stdio.h> //#include <stdlib.h> //#include <unistd.h> #include <wind ...

  5. DBC文件小结

    Vector的DBC文件描述了CAN网络的通信规范,通过定义signal可以表示CAN帧中的各个物理信号的含义.通过CANdb++ Editor软件可以创建和修改DBC文件,一般监控或控制CAN网络内 ...

  6. IT题库9-线程池的概念和原理

    在什么情况下使用线程池? 1.单个任务处理的时间比较短:2.需要处理的任务的数量大: 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销.2.如不使用线程池,有可能造成系统创建 ...

  7. loadrunner12中JavaVuser脚本的编写

    1.环境准备:      友情提示:用本地环境,不要用虚拟机      LoadRunner11----->对应JDK1.6版本(32位) LoadRunner12----->对应JDK1 ...

  8. 对接 第三方物流APP 手机版

    昨天因为bibi项目要对接 物流信息 开始找了快递鸟文档,但是要填写申请APP,必须要注册公司才可以,这样非常麻烦.下面的第三方物理接口,绝对让你满意. https://m.kuaidi100.com ...

  9. [NOIP2017赛前复习第二期]复赛考试技巧与模版-普及组

    考试技巧 1.拿到考卷首先通看题目,按自己感觉的难度排序(普及一般是1-2-3-4了~还是相信出题人不会坑我们的2333) 2.一般来说,普及组前两道题比较简单(大水题啊233~),但是通常坑很多,例 ...

  10. Centos 7 磁盘阵列配置介绍(RAID)

    转自:https://blog.51cto.com/gaowenlong/2086918 Centos 7 磁盘阵列配置介绍每当我们提到磁盘阵列,相信广大管理员并不陌生,比如我们一般安装服务器系统的时 ...