2817 Tangent的愤怒 - Wikioi
题目描述 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的更多相关文章
- Blockly编程:用Scratch制作游戏愤怒的小牛(小鸟)
愤怒的小鸟曾经很热门,网上还说他是程序员最喜欢玩的游戏.最先我是WIKIOI的评测页面看到他的,后来在2014年全国信息学奥林匹克联赛第一天第三题飞扬的小鸟也看到了它.因此,突然想做一个类似愤怒的小鸟 ...
- Scratch编程小案例:愤怒的小牛
愤怒的小鸟曾经很热门,网上还说他是程序员最喜欢玩的游戏.最先我是WIKIOI的评测页面看到他的,后来在2014年全国信息学奥林匹克联赛第一天第三题飞扬的小鸟也看到了它.因此,突然想做一个类似愤怒的小鸟 ...
- 元首的愤怒 SharePoint Apps
柏林数据中心的服务器机架已经插满.CPU 100%.电力基础设施处在崩溃的边缘,但当元首决定迁移到 Office 365 的时候,将军们却告诉他那里没有 Farm Solution,5 年多的投资将付 ...
- 【wikioi】1041 Car的旅行路线
题目链接 算法:最短路(数据弱,Floyd也能过) 惨痛的教训:此题我至少提交了20次,原因在于= =太草率和粗心了,看到那个多少组数据以为是城市的数量,导致数组开得小小的= =.(对不起,wikio ...
- 【wikioi】1040 统计单词个数
题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...
- [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)
题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...
- [wikioi 1307][poj 2054]欧少堆(乱搞)
题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...
- [wikioi 1519]过路费(最小生成树+树链剖分)
题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先 ...
- BUAA1389愤怒的DZY(最大值最小化)
http://acm.buaa.edu.cn/problem/1389/ 愤怒的DZY[问题描述]“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”.游 ...
随机推荐
- (转)linuxmint,ubuntu 下修改guake宽度方法
之前在网上找到修改guake.py的方式,但是我一直没能找到guake.py的文件,弄的我纠结,后来找到这个文章,这个确实是有效果的 Ubuntu12.04上Guake在唤出的时候滚动条会消失,主要原 ...
- tomcat 安装
升级系统之后很长一段时间没有用tomcat(主要是没做东西),这两天要开始干活了,发现竟然没法发用了....ok,重新整一遍.算是温习. 上次所有环境的搭建基本都是师兄帮我,自己做得东西很少,这次就正 ...
- http keepalive
转载自: http://www.92csz.com/17/1152.html http keepalive 在http早期 ,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就 ...
- 相对完美的后台Service实现播放音乐功能
对于用Context.startService()启动的service生命周期为onCreate()-onStartCommand()-onDestroy();如果多次用context.startSe ...
- 百度ueditor编辑器背景不显示问题
网友办法:http://www.hongxuejing.com/hulianwang/ueditor_not_show_background-33.html 官方办法:http://fex-team. ...
- Ibatis.net防Sql注入
sql注入是一个古老的话题了,但经常会被我们忽略.尤其是使用了ibatis.net之后. Ibatis.net框架对sql注入问题已经做了很好的防护,但经常由于开发人员使用不当,会造成sql的注入隐患 ...
- Windows下Android模拟环境的搭建
- stl::find,find_if,find_if_not
//满足特定条件下的实现,回调函数template<class InputIt, class UnaryPredicate> InputIt find_if(InputIt first, ...
- MD5加密简单算法
public partial class MD5运用 : Form { public MD5运用() { InitializeComponent(); } private void btnChange ...
- 【Qt】数据库连接池
请查看公孙二狗的文章 数据库连接池