Tricks Device

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1977    Accepted Submission(s): 509

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
 
Author
FZUACM
 
Source

题意:

n个点,m条边,构建有权无向图。

求出删去最少条边数可以使得图没有最短路径,以及删出最多条边使得图仍有最多条路径。

思路:

最短路处理出最短路径图,做法是使用dis数组,若若dis[v]-dis[u] = w(u,v),则该路在最短路径中。

建出最短路径之后 跑一次网络流,得到第一个答案。

在跑最短路中记录最短路的最少路数,ans2 = m - minb.

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
using namespace std;
const int N=2005;
const int MAXN=(1<<31)-1;
int INF=0x7f7f7f7f;
int T,n,m,k,tot;
int cas=1;
int head[N];
struct Edge{
int to,w,next;
}edge[60005*2];
void addedge(int u,int v,int w){
edge[tot].to=v;
edge[tot].w=w;
edge[tot].next=head[u];
head[u]=tot++; edge[tot].to=u;
edge[tot].w=w;
edge[tot].next=head[v];
head[v]=tot++;
} int dis[N],vis[N];
int minb[N];
int spfa(int s){
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
memset(minb,0x3f,sizeof minb); queue<int> q;
dis[s]=0;
minb[s]=0;
vis[s]=1;
q.push(s); while(!q.empty()){
int u=q.front();q.pop();
vis[u]=0; for(int i=head[u];~i;i=edge[i].next){
int v=edge[i].to,w=edge[i].w;
if(dis[v]==dis[u]+w){
minb[v]=min(minb[v],minb[u]+1);
if(!vis[v]){
vis[v]=1;
q.push(v);
}
} if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
minb[v]=minb[u]+1;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
} }
}
}
struct Eg{
int u,cap,rev;
Eg(int uu,int cc,int rr){
u=uu;cap=cc;rev=rr;
}
};
vector<Eg> G[N];
void add(int u,int v,int cap){
G[u].push_back(Eg(v,cap,G[v].size()));
G[v].push_back(Eg(u,0,G[u].size()-1));
} void build(){
for(int i=1;i<=n;i++){
for(int j=head[i];~j;j=edge[j].next){
int v=edge[j].to,w=edge[j].w;
if(dis[v]==dis[i]+w){
add(i,v,1); }
}
}
}
bool used[N];
int dfs(int v,int t,int f){
if(v==t) return f;
used[v]=true;
for(int i=0;i<G[v].size();i++){
Eg &e=G[v][i];
if(!used[e.u] && e.cap>0){
int d=dfs(e.u,t,min(f,e.cap));
if(d>0){
e.cap-=d;
G[e.u][e.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t){
int flow=0;
while(1){
memset(used,0,sizeof used);
int f=dfs(s,t,INF);
if(f==0) return flow;
flow+=f;
}
}
void init(){
tot=0;
memset(head,-1,sizeof head);
for(int i=0;i<N;i++) G[i].clear();
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("aaa","r",stdin);
#endif while(~scanf("%d%d",&n,&m)){
init();
for(int i=0;i<m;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
addedge(u,v,w);
}
spfa(1); build();
int ans=max_flow(1,n);
printf("%d %d\n",ans,m-minb[n]);
} return 0;
}

  

2015 多校联赛 ——HDU5294(最短路,最小切割)的更多相关文章

  1. 2015 多校联赛 ——HDU5301(技巧)

    Your current task is to make a ground plan for a residential building located in HZXJHS. So you must ...

  2. 2015 多校联赛 ——HDU5349(水)

    Problem Description A simple problem Problem Description You have a multiple set,and now there are t ...

  3. 2015 多校联赛 ——HDU5334(构造)

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  4. 2015 多校联赛 ——HDU5335(Walk out)

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total S ...

  5. 2015 多校联赛 ——HDU5302(构造)

    Connect the Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. 2015 多校联赛 ——HDU5325(DFS)

    Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Tota ...

  7. 2015 多校联赛 ——HDU5316(线段树)

    Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...

  8. 2015 多校联赛 ——HDU5323(搜索)

    Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  9. 2015 多校联赛 ——HDU5319(模拟)

    Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

随机推荐

  1. 团队作业7——第二次项目冲刺(Beta版本12.06)

    项目每个成员的进展.存在问题.接下来两天的安排. 已完成的内容:队员每个人提出对接下来需要做的事情的看法和意见,将需要做的任务更新到了leangoo中进行管理,产品完成了界面优化的设计,测试复现了之前 ...

  2. 第201621123043 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  3. Python 二分查找

    (非递归实现) def binary_search(alist, item): first = 0 last = len(alist)-1 while first<=last: midpoint ...

  4. NetFPGA-1G-CML从零开始环境配置

    NetFPGA-1G-CML从零开始环境配置 前言 偶得一块NetFPGA-1G-CML,跟着github对NetFPGA-1G-CML的入门指南,一步步把配置环境终于搭建起来,下面重新复现一下此过程 ...

  5. jvm垃圾收集器总结jdk1.7

    内存 ● 线程私有:程序计数器,虚拟机栈,本地方法栈 ● 线程共享: 方法区,堆 判断存活算法 ● 引用计数法:无法解决循环引用问题. ● 可达性分析算法: 从GCRoot作为起始点,向下搜索,经过的 ...

  6. kali rolling更新源之gpg和dirmngr问题

    1.编辑 /etc/apt/source.list gedit /etc/apt/sources.list 输入更新源,可以选任何可用更新源,这里设置官方源 deb http://http.kali. ...

  7. Python之旅.第三章.函数3.28

    一.命名关键字参数: 什么是命名关键字参数?格式:在*后面参数都是命名关键字参数特点:1 必须被传值1 约束函数的调用者必须按照key=value的形式传值2 约束函数的调用者必须用我们指定的key名 ...

  8. VMware网络配置

    NAT模式 首先保证虚拟机网卡和主机对接,虚拟机网络连接要和主机在同一网段 1. 控制面板\网络和 Internet\网络连接中配置VMnet8 2. 编辑虚拟机网络配置 此处子网ip需要和Vnet8 ...

  9. 新概念英语(1-17)How do you do ?

    Is there a problem wtih the Customers officer? What are Michael Baker and Jeremy Short's jobs? A:Com ...

  10. 115 个 Java 面试题和答案——终极(上)

    目录 面向对象编程(OOP)常见的 Java 问题Java 线程Java 集合类垃圾收集器 面向对象编程(OOP) Java 是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开 ...