面对最小割之类的题目,完全木想法。。。

枚举+最大流。。复杂度很大了。。。居然很快的就过了。。

 /*
ID: cuizhe
LANG: C++
TASK: telecow
*/
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
#define INF 0xffffff
struct node
{
int u,v,w,next;
} edge[];
int first[],flag[],dis[];
int qu[],qv[];
int t,n,m,ans;
int sv,ev;
void CL()
{
t = ;
memset(first,-,sizeof(first));
}
void add(int u,int v,int w)
{
edge[t].u = u;
edge[t].v = v;
edge[t].w = w;
edge[t].next = first[u];
first[u] = t ++; edge[t].u = v;
edge[t].v = u;
edge[t].w = ;
edge[t].next = first[v];
first[v] = t ++;
}
void build()
{
int i;
CL();
for(i = ; i < m; i ++)
{
add(qu[i]+n,qv[i],INF);
add(qv[i]+n,qu[i],INF);
}
for(i = ; i <= n; i ++)
{
if(!flag[i])
{
if(i == sv)
add(i,i+n,INF);
else if(i == ev)
add(i,i+n,INF);
else
add(i,i+n,);
}
}
}
int bfs()
{
int u,v,i;
memset(dis,-,sizeof(dis));
queue<int> que;
que.push(sv);
dis[sv] = ;
while(!que.empty())
{
u = que.front();
que.pop();
for(i = first[u]; i != -; i = edge[i].next)
{
v = edge[i].v;
if(edge[i].w > &&dis[v] < )
{
dis[v] = dis[u] + ;
que.push(v);
}
}
}
if(dis[ev] > ) return ;
else return ;
}
int dfs(int u,int step)
{
int i,a = ,v;
if (u == ev) return step;
for (i = first[u]; i != -; i = edge[i].next)
{
v = edge[i].v;
if (edge[i].w > && dis[v] == dis[u]+&&(a = dfs(v,min(step,edge[i].w))))
{
edge[i].w -= a;
edge[i^].w += a;
return a;
}
}
return ;
}
int dinic()
{
int res,ans = ;
while(bfs())
{
while(res = dfs(sv,INF))
ans+= res ;
}
return ans;
}
void path(int x)
{
int i;
if(x == ) return ;
for(i = ; i <= n; i ++)
{
if(flag[i] == ) continue;
if(i == sv||i == ev) continue;
flag[i] = ;
build();
if(dinic() == x-)
{
if(x == ans)
printf("%d",i);
else
printf(" %d",i);
path(x-);
return ;
}
else
flag[i] = ;
}
return ;
}
int main()
{
int i;
freopen("telecow.in","r",stdin);
freopen("telecow.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&sv,&ev);
for(i = ; i < m; i ++)
{
scanf("%d%d",&qu[i],&qv[i]);
}
build();
printf("%d\n",ans = dinic());
path(ans);
printf("\n");
return ;
}

USACO 5.4 Telecowmunication(最大流+枚举)的更多相关文章

  1. loj 1154(最大流+枚举汇点)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26868 思路:拆点,容量为最多能跳的步数,然后设立一个超级源点,源 ...

  2. hust-1024-dance party(最大流--枚举,可行流判断)

    题意: 舞会上,男孩和女孩配对,求最大完全匹配个数,要求每个人最多与k个不喜欢的人配对,且每次都和不同的人配对. 分析: 将一个点拆成3个点. b,  b1, b2.   从1到n枚举ans,  判可 ...

  3. POJ-3189-Steady Cow Assignment(最大流+枚举)

    题意 此题题意不太好懂.现有n头牛和b个牛棚,每个牛棚可以养的牛的数目都有一个限制c[i],表示该牛棚最多只能关c[i]头牛,每头牛对每一个牛棚都有一个喜爱值,用1到b来表示,现在要安排这些牛,使得牛 ...

  4. POJ3228 并查集或二分最大流枚举答案

    忘记写题意了.这题题意:给出每个地点的金矿与金库的数量,再给出边的长度.求取最大可通过边长的最小权值使每个金矿都能运输到金库里. 这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度 ...

  5. BZOJ1189:[HNOI2007]紧急疏散EVACUATE(最大流,枚举)

    Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一 块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是 ...

  6. POJ 2699 The Maximum Number of Strong Kings (最大流+枚举)

    http://poj.org/problem?id=2699 题意: 一场联赛可以表示成一个完全图,点表示参赛选手,任意两点u, v之间有且仅有一条有向边(u, v)或( v, u),表示u打败v或v ...

  7. POJ - 2699 The Maximum Number of Strong Kings (最大流+枚举)

    题意:有n(n<=10)个选手,两两之间打比赛,共有n*(n-1)/2场比赛,赢一场得1分.给出每个人最后的得分.求有多少个定义如下的strong king:赢了所有得分比自己高的人或本身就是分 ...

  8. poj 2699 The Maximum Number of Strong Kings【最大流+枚举】

    因为n很小所以从大到小枚举答案.(从小到大先排个序,因为显然胜利场次越多越容易成为strong king.然后对于每个枚举出来的ans建图.点分别表示人和比赛.s向所有人连接流量为胜利场次的边,所有比 ...

  9. USACO 玛丽卡(最短路+枚举)

    USACO 玛丽卡 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市 ...

随机推荐

  1. 在VMware的虚拟机平台上如何进行网络设置

    1.本文构建的是这样一个网络,有两台winXP系统的PC,处于同一局域网内,PC里 都装有VMware虚拟机,虚拟机上跑的是Redhat Linux 9,我们想要在winXP系统下访问本机的虚拟机li ...

  2. 【SpringMVC】SpringMVC系列15之SpringMVC最佳实践

    15.SpringMVC最佳实践 15.1.遵循Restful API最佳实践 参考:http://segmentfault.com/a/1190000002949234 15.2.统一返回字段 15 ...

  3. Hydra---Linux下的暴力美学

    引自:http://www.cnblogs.com/mchina/archive/2013/01/01/2840815.html 安装:http://www.91ri.org/2867.html yu ...

  4. codeforces C. Vasily the Bear and Sequence 解题报告

    题目链接:http://codeforces.com/problemset/problem/336/C 题目意思:给出一个递增的正整数序列 a1, a2, ..., an,要求从中选出一堆数b1, b ...

  5. JavaScript设计模式 - 迭代器模式

    迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...

  6. HDU1712周期

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. google maps js v3 api教程(3) -- 创建infowindow

    原文地址 前面我们学习了地图和标记的创建.那么今天我们来学习怎样在地图上显示一个窗口(infowindow) infowindow构造函数为:InfoWindow(opts?:InfoWindowOp ...

  8. [Android Pro] Android签名与认证详细分析之一(CERT.RSA剖析)

    转载自:http://www.thinksaas.cn/group/topic/335450/ 一.Android签名概述 我们已经知道的是:Android对每一个Apk文件都会进行签名,在Apk文件 ...

  9. 开源混淆工具ProGuard配置详解及配置实例

    ProGuard的作用:   1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 2.创建的程序和程序库很难使用反向工程. 3.所以它能删除来自源文件中的没有调用的代码 4.充分利 ...

  10. July 17th, Week 30th Sunday, 2016

    You are beautiful, but that is not why I love you. 你如此美丽,但我并非因此而爱你. Although we have always been tol ...