Tricks Device

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 124    Accepted Submission(s): 27

Problem Description
Innocent Wu follows Dumb Zhang into a ancient tomb. Innocent Wu’s at the entrance of the tomb while Dumb Zhang’s at the end of it. The tomb is made up of many chambers, the total number is N. And there are M channels connecting the
chambers. Innocent Wu wants to catch up Dumb Zhang to find out the answers of some questions, however, it’s Dumb Zhang’s intention to keep Innocent Wu in the dark, to do which he has to stop Innocent Wu from getting him. Only via the original shortest ways
from the entrance to the end of the tomb costs the minimum time, and that’s the only chance Innocent Wu can catch Dumb Zhang.

Unfortunately, Dumb Zhang masters the art of becoming invisible(奇门遁甲) and tricks devices of this tomb, he can cut off the connections between chambers by using them. Dumb Zhang wanders how many channels at least he has to cut to stop Innocent Wu. And Innocent
Wu wants to know after how many channels at most Dumb Zhang cut off Innocent Wu still has the chance to catch Dumb Zhang.
 
Input
There are multiple test cases. Please process till EOF.

For each case,the first line must includes two integers, N(<=2000), M(<=60000). N is the total number of the chambers, M is the total number of the channels.

In the following M lines, every line must includes three numbers, and use ai、bi、li as channel i connecting chamber ai and bi(1<=ai,bi<=n), it costs li(0<li<=100) minute to pass channel i.

The entrance of the tomb is at the chamber one, the end of tomb is at the chamber N.
 
Output
Output two numbers to stand for the answers of Dumb Zhang and Innocent Wu’s questions.
 
Sample Input
8 9
1 2 2
2 3 2
2 4 1
3 5 3
4 5 4
5 8 1
1 6 2
6 7 5
7 8 1
 
Sample Output
2 6
 
Source
 
Recommend
We have carefully selected several similar problems for you:  5299 

pid=5298" target="_blank">5298 

pid=5297" target="_blank">5297 5296 

pid=5295" target="_blank">5295 

 

题意:n个点m条无向边,如果从起点0到终点n-1的最短路距离为dist,求最少删除多少条边使得图中不再存在最短路。最多删除多少条边使得图中仍然存在最短路。

思路:先用spfa求一次最短路,开一个road数组,road[i]表示从起点走到i点最短路径所经过的最少边数,然后第二问就是m-road[n-1];再依据最短路的dist数组推断哪些边是最短路上的,用它们又一次构图。跑一遍网络流求最小割。比赛的时候没有在最短路上建边,直接用的原图。果断TLE,又坑了队友=-=

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#pragma comment (linker,"/STACK:102400000,102400000")
#define pi acos(-1.0)
#define eps 1e-6
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define FRE(i,a,b) for(i = a; i <= b; i++)
#define FREE(i,a,b) for(i = a; i >= b; i--)
#define FRL(i,a,b) for(i = a; i < b; i++)
#define FRLL(i,a,b) for(i = a; i > b; i--)
#define mem(t, v) memset ((t) , v, sizeof(t))
#define sf(n) scanf("%d", &n)
#define sff(a,b) scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define pf printf
#define DBG pf("Hi\n")
typedef long long ll;
using namespace std; #define INF 0x3f3f3f3f
#define mod 1000000009
const int MAXN = 2005;
const int MAXM = 200005;
const int N = 1005; int n,m; struct EDGE
{
int u,v,len,next;
}e[MAXM]; struct Edge
{
int to,next,cap,flow;
}edge[MAXM]; int tol;
int head[MAXN]; void init()
{
tol=0;
memset(head,-1,sizeof(head));
} void add(int u,int v,int len)
{
e[tol].u=u;
e[tol].v=v;
e[tol].len=len;
e[tol].next=head[u];
head[u]=tol++;
e[tol].u=v;
e[tol].v=u;
e[tol].len=len;
e[tol].next=head[v];
head[v]=tol++;
} void addedge(int u,int v,int w,int rw=0)
{
edge[tol].to=v;
edge[tol].cap=w;
edge[tol].flow=0;
edge[tol].next=head[u];
head[u]=tol++; edge[tol].to=u;
edge[tol].cap=rw;
edge[tol].flow=0;
edge[tol].next=head[v];
head[v]=tol++;
} int Q[MAXN];
int dep[MAXN],cur[MAXN],sta[MAXN]; bool bfs(int s,int t,int n)
{
int front=0,tail=0;
memset(dep,-1,sizeof(dep[0])*(n+1));
dep[s]=0;
Q[tail++]=s;
while (front<tail)
{
int u=Q[front++];
for (int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].to;
if (edge[i].cap>edge[i].flow && dep[v]==-1)
{
dep[v]=dep[u]+1;
if (v==t) return true;
Q[tail++]=v;
}
}
}
return false;
} int dinic(int s,int t,int n)
{
int maxflow=0;
while (bfs(s,t,n))
{
for (int i=0;i<n;i++) cur[i]=head[i];
int u=s,tail=0;
while (cur[s]!=-1)
{
if (u==t)
{
int tp=INF;
for (int i=tail-1;i>=0;i--)
tp=min(tp,edge[sta[i]].cap-edge[sta[i]].flow);
maxflow+=tp;
for (int i=tail-1;i>=0;i--)
{
edge[sta[i]].flow+=tp;
edge[sta[i]^1].flow-=tp;
if (edge[sta[i]].cap-edge[sta[i]].flow==0)
tail=i;
}
u=edge[sta[tail]^1].to;
}
else if (cur[u]!=-1 && edge[cur[u]].cap > edge[cur[u]].flow &&dep[u]+1==dep[edge[cur[u]].to])
{
sta[tail++]=cur[u];
u=edge[cur[u]].to;
}
else
{
while (u!=s && cur[u]==-1)
u=edge[sta[--tail]^1].to;
cur[u]=edge[cur[u]].next;
}
}
}
return maxflow;
} int dist[MAXN];
int vis[MAXN];
int road[MAXN]; void SPFA()
{
memset(vis,0,sizeof(vis));
memset(dist,INF,sizeof(dist));
memset(road,INF,sizeof(road));
dist[0]=0;
road[0]=0;
vis[0]=1;
queue<int>Q;
Q.push(0);
while (!Q.empty())
{
int u=Q.front();
Q.pop();
vis[u]=0;
for (int i=head[u];~i;i=e[i].next)
{
int v=e[i].v;
if (dist[v]>dist[u]+e[i].len)
{
dist[v]=dist[u]+e[i].len;
road[v]=road[u]+1;
if (!vis[v])
{
vis[v]=1;
Q.push(v);
}
}
else if (dist[v]==dist[u]+e[i].len)
{
if (road[v]>road[u]+1)
{
road[v]=road[u]+1;
if (!vis[v])
{
vis[v]=1;
Q.push(v);
}
}
}
}
}
} int main()
{
#ifndef ONLINE_JUDGE
freopen("C:/Users/lyf/Desktop/IN.txt","r",stdin);
#endif
int i,j,u,v,w;
while (~sff(n,m))
{
init();
for (i=0;i<m;i++)
{
sfff(u,v,w);
if (u==v) continue;
u--;v--;
add(u,v,w);
}
SPFA();
int cnt=tol;
init();
for (i=0;i<cnt;i++)
{
u=e[i].u;
v=e[i].v;
if (dist[v]==dist[u]+e[i].len)
addedge(u,v,1);
}
int ans=dinic(0,n-1,n);
pf("%d %d\n",ans,m-road[n-1]);
}
return 0;
}

Tricks Device (hdu 5294 最短路+最大流)的更多相关文章

  1. hdu 5294 最短路+最大流 ***

    处理处最短路径图,这个比较巧妙 链接:点我

  2. HDU 5294 Tricks Device(多校2015 最大流+最短路啊)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Problem Description Innocent Wu follows Dumb Zha ...

  3. hdu 3599(最短路+最大流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3599 思路:首先spfa求一下最短路,然后对于满足最短路上的边(dist[v]==dist[u]+w) ...

  4. HDU 5294 Tricks Device (最大流+最短路)

    题目链接:HDU 5294 Tricks Device 题意:n个点,m条边.而且一个人从1走到n仅仅会走1到n的最短路径.问至少破坏几条边使原图的最短路不存在.最多破坏几条边使原图的最短路劲仍存在 ...

  5. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  6. HDU 5294 Tricks Device 网络流 最短路

    Tricks Device 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5294 Description Innocent Wu follows D ...

  7. HDOJ 5294 Tricks Device 最短路(记录路径)+最小割

    最短路记录路径,同一时候求出最短的路径上最少要有多少条边, 然后用在最短路上的边又一次构图后求最小割. Tricks Device Time Limit: 2000/1000 MS (Java/Oth ...

  8. SPFA+Dinic HDOJ 5294 Tricks Device

    题目传送门 /* 题意:一无向图,问至少要割掉几条边破坏最短路,问最多能割掉几条边还能保持最短路 SPFA+Dinic:SPFA求最短路时,用cnt[i]记录到i最少要几条边,第二个答案是m - cn ...

  9. HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

随机推荐

  1. jsoi2014前两轮回眸

    今天从常州回来了,第二轮考得惨不忍睹 大概来总结一下前两轮: 第一轮是4个小时,3道题,一道网络流,一道环形DP,一道线段树 最后一道题ahoi的原题(传送bzoj1798),非常水的线段树,是个很好 ...

  2. php discuz框架接口不能正常访问的问题

    本人php小白,无php编程基础,直接上php服务器部署,后果很严重.....所以务必看完请给”顶“给评论,以表示对小白的鼓励和赞赏! 关于discuz框架,独自加班,废寝忘食,然已无力吐槽..... ...

  3. Sencha 基础Demo测试,三种showView的方法

    直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...

  4. acdream 小晴天老师系列——苹果大丰收(DP)

    小晴天老师系列——苹果大丰收 Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买 ...

  5. 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  6. Mac: the original hosts

    ## # Host Database # # localhost is used to configure the loopback interface # when the system is bo ...

  7. 表格的一些原生js操作(隔行变色,高亮显示,添加删除,搜索)

    看着网上的视频教程,虽说还是有点简单,但还是不免想记录下.这些操作包括(隔行变色,高亮显示,添加删除,搜索功能),而这儿就是涉及table的原有属性“tBodies” “rows” “cells”等几 ...

  8. ViewPager onPageChangeListener总结

    今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageC ...

  9. C# 中的结构类型(struct)

    原文 C# 中的结构类型(struct) 简介 有时候,类中只包含极少的数据,因为管理堆而造成的开销显得极不合算.这种情况下,更好的做法是使用结构(struct)类型.由于 struct 是值类型,是 ...

  10. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...