题目描述 Description

      如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。

      第二段:本题改编自Usaco Training 4.4.2...

      第三段:本题加大了数据强度...

      第四段:本题来自CH Round #1...

      第五段:快去看第六段!

      Tangent来到OI村,想起Bread经常在他面前晒妹(Lemon),于是要把二人分隔两地,永世不能相见。

      黑化的Tangent拥有了分裂大地的力量,他要分裂两人的家之间的一些路,使得Bread不能去找Lemon。(保证Bread家和Lemon家连通)

      从Bread家到Lemon家的路现在可以看成是一个有向图,具有N个点,M条边。(点的编号为1~N,边的编号按照离Tangent的距离由近到远依次为1~M)

      Tangent想要毁坏一条边的代价是Wi。

      由于Tangent想要节省力量去毁坏更多和谐的事物,所以他的炸路方案必定是总代价最小、边数量最小的,而且他希望能尽快做完这件事,所以他炸的路对应编号必定是字典序最小的。

输入描述 Input Description

      第一行四个正整数N,M,S0,T0,分别表示点数,边数,Bread家的点编号,Lemon家的点编号。

      接下来N行,按照边的编号依次描述每条边,每行三个正整数Si,Ti,Wi,分别表示第i条边的起点、终点和毁坏代价。

输出描述 Output Description

      第一行两个正整数W和K,表示总最小代价和最小炸路数量。

      接下来K行,输出最小字典序方案,每行一个正整数Number,表示第Number条边要炸毁。

样例输入 Sample Input

    4 5 1 4
1 3 100
3 2 50
2 4 60
1 2 40
2 3 80 样例输出 Sample Output 60 1
3 数据范围及提示 Data Size & Hint 对于30%的数据:N\leq 10, M\leq 500
对于60%的数据:N\leq 20, M\leq 1000
对于100%的数据:N\leq 50,M\leq 5000,W_{i}\leq 10^{5} 很巧妙的做法,把边权*(m+1)+1,这样最大流/(m+1)就是原来的最大流,因为+1那一部分最多加m
最大流%(m+1)就是边数,可以保证最小割又可以保证最少边数
做一遍最大流,从小到大枚举边,判断是否在最小割里,在就删除输出,再把原来的最大流减去这条边,继续做
 #include<cstdio>
using namespace std; const int maxn=;
const int maxm=+; long long map[maxn][maxn],a[maxn][maxn],w[maxm];
int n,m,s,t,u[maxm],v[maxm];
long long ans; void work()
{
int i,j;
for(i=;i<=n;++i)
for(j=;j<=n;++j)
a[i][j]=map[i][j];
} long long f,aug,his[maxn];
int pre[maxn],vh[maxn],dis[maxn]; long long flow()
{
int i,j,temp,min;
bool flag=false;
f=;
aug=;
vh[]=n;
for(i=;i<=n;++i)
vh[i]=;
for(i=;i<=n;++i)
dis[i]=;
i=s;
while(dis[i]<n)
{
his[i]=aug;
flag=false;
for(j=;j<=n;++j)
if(a[i][j]>&dis[i]==dis[j]+)
{
flag=true;
if(aug>a[i][j])aug=a[i][j];
pre[j]=i;
i=j;
if(i==t)
{
f+=aug;
while(i!=s)
{
temp=pre[i];
a[temp][i]-=aug;
a[i][temp]+=aug;
i=temp;
}
aug=;
}
break;
}
if(flag)continue;
min=n-;
for(j=;j<=n;++j)
if(a[i][j]>&dis[j]<min)min=dis[j];
--vh[dis[i]];
if(vh[dis[i]]==)break;
dis[i]=min+;
++vh[dis[i]];
if(i!=s)
{
i=pre[i];
aug=his[i];
}
}
return f;
} int main()
{
int i,j;
scanf("%d%d%d%d",&n,&m,&s,&t);
for(i=;i<=m;++i)
{
scanf("%d%d%lld",&u[i],&v[i],&w[i]);
w[i]=w[i]*(m+)+;
map[u[i]][v[i]]+=w[i];
}
work();
ans=flow();
printf("%lld %lld\n",ans/(m+),ans%(m+));
for(i=;i<=m;++i)
{
work();
a[u[i]][v[i]]-=w[i];
if(flow()+w[i]==ans)
{
printf("%d\n",i);
map[u[i]][v[i]]-=w[i];
ans-=w[i];
}
}
return ;
}
												

2817 Tangent的愤怒 - Wikioi的更多相关文章

  1. Blockly编程:用Scratch制作游戏愤怒的小牛(小鸟)

    愤怒的小鸟曾经很热门,网上还说他是程序员最喜欢玩的游戏.最先我是WIKIOI的评测页面看到他的,后来在2014年全国信息学奥林匹克联赛第一天第三题飞扬的小鸟也看到了它.因此,突然想做一个类似愤怒的小鸟 ...

  2. Scratch编程小案例:愤怒的小牛

    愤怒的小鸟曾经很热门,网上还说他是程序员最喜欢玩的游戏.最先我是WIKIOI的评测页面看到他的,后来在2014年全国信息学奥林匹克联赛第一天第三题飞扬的小鸟也看到了它.因此,突然想做一个类似愤怒的小鸟 ...

  3. 元首的愤怒 SharePoint Apps

    柏林数据中心的服务器机架已经插满.CPU 100%.电力基础设施处在崩溃的边缘,但当元首决定迁移到 Office 365 的时候,将军们却告诉他那里没有 Farm Solution,5 年多的投资将付 ...

  4. 【wikioi】1041 Car的旅行路线

    题目链接 算法:最短路(数据弱,Floyd也能过) 惨痛的教训:此题我至少提交了20次,原因在于= =太草率和粗心了,看到那个多少组数据以为是城市的数量,导致数组开得小小的= =.(对不起,wikio ...

  5. 【wikioi】1040 统计单词个数

    题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...

  6. [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)

    题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...

  7. [wikioi 1307][poj 2054]欧少堆(乱搞)

    题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...

  8. [wikioi 1519]过路费(最小生成树+树链剖分)

    题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先 ...

  9. BUAA1389愤怒的DZY(最大值最小化)

    http://acm.buaa.edu.cn/problem/1389/ 愤怒的DZY[问题描述]“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”.游 ...

随机推荐

  1. CSS3 动画记

    css3 动画 在CSS3中可以通过animation创建复杂的动画序列,像transition属性一样用来控制CSS的属性实现动画效果. animation实现动画效果主要由两个部分组成. 通过类似 ...

  2. JMS - Exceptions

    The JMSException JMS defines JMSException as the root class for exceptions thrown by JMS methods. JM ...

  3. Ehcache(2.9.x) - API Developer Guide, Cache Manager Event Listeners

    About CacheManager Event Listeners CacheManager event listeners allow implementers to register callb ...

  4. 分享4个未注册*sdn域名

    众所周知msdn和csdn在IT界享有盛誉. Microsoft Developer Network-MSDN Chinese software develop net-CSDN 分享以下4个未注册域 ...

  5. jQuery 的插件 dataTables

    ---恢复内容开始--- jQuery 的插件 dataTables 是一个优秀的表格插件,提供了针对表格的排序.浏览器分页.服务器分页.筛选.格式化等功能.dataTables 的网站上也提供了大量 ...

  6. 解决TextView在显示文字的时候,一行还没显示满就跳到下一行

    转载请注明:转自 http://blog.csdn.NET/u011176685/article/details/48295185 一.问题描述: Android的TextView在显示文字的时候,如 ...

  7. SpringMVC接收多个对象

    问题背景: 要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:将Json对象序列化成Json字符串提 ...

  8. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(三)DOCTYPE和字符集

    在2.1.2节中通过新老DOCTYPE的对比,读者可以清晰地看到HTML 5在精简旧有结构上做出的努力.DOCTYPE在出现之初主要用于XML中,用作描述XML允许使用的元素.属性和排列方式.起初HT ...

  9. Mysql 作业(Scheduler)

    200 ? "200px" : this.width)!important;} --> 介绍 作业也叫做事件调度,其实它也就是一个时间触发器:它可以定义某个时间点执行指定的数 ...

  10. hash桶

    #include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...