USACO 5.4 Telecowmunication(最大流+枚举)
面对最小割之类的题目,完全木想法。。。
枚举+最大流。。复杂度很大了。。。居然很快的就过了。。
/*
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(最大流+枚举)的更多相关文章
- loj 1154(最大流+枚举汇点)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26868 思路:拆点,容量为最多能跳的步数,然后设立一个超级源点,源 ...
- hust-1024-dance party(最大流--枚举,可行流判断)
题意: 舞会上,男孩和女孩配对,求最大完全匹配个数,要求每个人最多与k个不喜欢的人配对,且每次都和不同的人配对. 分析: 将一个点拆成3个点. b, b1, b2. 从1到n枚举ans, 判可 ...
- POJ-3189-Steady Cow Assignment(最大流+枚举)
题意 此题题意不太好懂.现有n头牛和b个牛棚,每个牛棚可以养的牛的数目都有一个限制c[i],表示该牛棚最多只能关c[i]头牛,每头牛对每一个牛棚都有一个喜爱值,用1到b来表示,现在要安排这些牛,使得牛 ...
- POJ3228 并查集或二分最大流枚举答案
忘记写题意了.这题题意:给出每个地点的金矿与金库的数量,再给出边的长度.求取最大可通过边长的最小权值使每个金矿都能运输到金库里. 这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度 ...
- BZOJ1189:[HNOI2007]紧急疏散EVACUATE(最大流,枚举)
Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一 块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是 ...
- POJ 2699 The Maximum Number of Strong Kings (最大流+枚举)
http://poj.org/problem?id=2699 题意: 一场联赛可以表示成一个完全图,点表示参赛选手,任意两点u, v之间有且仅有一条有向边(u, v)或( v, u),表示u打败v或v ...
- POJ - 2699 The Maximum Number of Strong Kings (最大流+枚举)
题意:有n(n<=10)个选手,两两之间打比赛,共有n*(n-1)/2场比赛,赢一场得1分.给出每个人最后的得分.求有多少个定义如下的strong king:赢了所有得分比自己高的人或本身就是分 ...
- poj 2699 The Maximum Number of Strong Kings【最大流+枚举】
因为n很小所以从大到小枚举答案.(从小到大先排个序,因为显然胜利场次越多越容易成为strong king.然后对于每个枚举出来的ans建图.点分别表示人和比赛.s向所有人连接流量为胜利场次的边,所有比 ...
- USACO 玛丽卡(最短路+枚举)
USACO 玛丽卡 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市 ...
随机推荐
- HDOJ 1301
9852303 2013-12-18 11:47:01 Accepted 1301 0MS 264K 1117 B C++ 泽泽 Jungle Roads Time Limit: 2000/1000 ...
- Convert Sorted List to Balanced BST
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- eclipse加速之禁用JS、jsp等文件的语法验证,eclipsejs
eclipse加速之禁用JS.jsp等文件的语法验证 去除eclipse的JS验证:将windows->preference->Java Script->Validator-> ...
- c/c++指针总结[pointer summary]
[本文链接] http://www.cnblogs.com/hellogiser/p/pointer-summary.html 1.指针注意事项 (1). 指针类型字符串不容许修改 char *str ...
- sqlserver 中的NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
1.NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Rol ...
- eclipse字体的设置
eclipse的默认字体太小,所以设置的大一些比较清楚,方法很简单,单击菜单栏的"Window"选择"Preferences",如下图: 然后左侧依次选择Gen ...
- codeforces 483A. Counterexample 解题报告
题目链接:http://codeforces.com/problemset/problem/483/A 题目意思:给出一个区间 [l, r],要从中找出a, b, c,需要满足 a, b 互质,b, ...
- Java程序编译和运行的过程
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode) 2 ...
- 【读书笔记】读《JavaScript模式》 - JavaScript函数常用模式
API模式:回调模式.配置对象.返回函数: 初始化模式:即时函数.即时对象初始化.初始化分支: 性能模式:备忘模式.自定义模式 //*********************** API模式 **** ...
- 使用Antlr实现简单的DSL
为什么要使用DSL DSL是领域专用语言,常见的DSL有SQL,CSS,Shell等等,这些DSL语言有别于其他通用语言如:C++,Java,C#,DSL常在特殊的场景或领域中使用.如下图: 领域专用 ...