题目描述 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. webkit,HTML5头部标签

    大家都知道在移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来.本文整理一些HTML5头部<meta>标签常用的 ...

  2. 单击改变input的边框颜色

    input边框变色   今天布局页面的时候发现设计稿多了一项要求,就是点击input框的时候要求框框变色,以前没有遇到过,平时很多时候都用的:hover这次想着一样吧,看了之后发现不是想要的效果,ho ...

  3. IIS实现301重定向

    301永久重定向对SEO无任何不好的影响,而且网页A的关键词排名和PR级别都会传达给网页B,网站更换了域名,表示本网页永久性转移到另一个地址,对于搜索引擎优化|SEO来说,给搜索引擎一个友好的信息,告 ...

  4. linux中FTP自动备份VPS脚本

    服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...

  5. iOS动画——弹窗动画(pop动画)

    用pop动画简单实现弹窗的缩放和渐变,感觉这个动画常用,就写一下博客 pop动画是Facebook推出的动画引擎,请自行到GitHub上搜索下载拖拽导入xcode项目中. 更多pop动画使用和原理可网 ...

  6. VS2013 打开项目时出现 未定义标识符string的解决办法

    ---恢复内容开始--- 前两天从前辈那儿弄到一份源码,VC 6时期写出来的mfc程序. 打开之后直接编译编译成功,可以运行.但是看代码的时候却发现出现了好多错误,如 未定义标识符string,NUL ...

  7. c#输出json,其中包含子json (可以含 无限级 子json)的方法思路

    首页 给出  DataTable 转Json 的方法: public static string TableToJson(DataTable dt) { List<Dictionary<s ...

  8. EL表达式获取Map和List中的值

    EL表达式获取Map和List中的值   EL表达式取Map中的值: 当Map中是String,String时 后台servlet中: Map<String, String> map1 = ...

  9. (POJ 2318)TOYS 向量叉积

    题目链接:http://poj.org/problem?id=2318 #include<stdio.h> #include<cstdlib> #include<cstr ...

  10. asp.net 中使用less

    首先 ,需要知道 whats the less; 实际上less 只是针对css比较难于维护和抽象这种现象,而创造的一个工具. 然后,在抛开语言环境的情况下(例如.net 是vs环境,java是ecl ...