2015 多校联赛 ——HDU5294(最短路,最小切割)
Tricks Device
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1977 Accepted Submission(s): 509
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.
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.
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
题意:
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(最短路,最小切割)的更多相关文章
- 2015 多校联赛 ——HDU5301(技巧)
Your current task is to make a ground plan for a residential building located in HZXJHS. So you must ...
- 2015 多校联赛 ——HDU5349(水)
Problem Description A simple problem Problem Description You have a multiple set,and now there are t ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 2015 多校联赛 ——HDU5335(Walk out)
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total S ...
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...
- 2015 多校联赛 ——HDU5316(线段树)
Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...
- 2015 多校联赛 ——HDU5323(搜索)
Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 2015 多校联赛 ——HDU5319(模拟)
Painter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
随机推荐
- python实现简单tftp(基于udp)
tftp是基于udp的协议 实现简单的tftp,首先要有tftp的协议图. tftp默认接收端口为69,但每次有连接过来后,tftp会随机分配一个端口来专门为这个连接来服务. 操作码:1.上传 2.下 ...
- Flask 视图
写个验证用户登录的装饰器:在调用函数前,先检查session里有没有用户 from functools import wraps from flask import session, abort de ...
- day-5 python协程与I/O编程深入浅出
基于python编程语言环境,重新学习了一遍操作系统IO编程基本知识,同时也学习了什么是协程,通过实际编程,了解进程+协程的优势. 一.python协程编程实现 1. 什么是协程(以下内容来自维基百 ...
- 接触JS的变量
刚刚接触到js,写的代码都是很简单的,制单的概念也相当少,新学习的就是变量.let和const以及js的数据类型. 变量的内容有五个,我就不一一介绍了,重点在于: 在 JavaScript 中,使用变 ...
- GIT入门笔记(4)- GIT 安装
关于Windows下的安装工具-msysgit Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样. Cygwin的安装和配置都比较复杂,不建议直接折 ...
- ActiveMQ学习系列(一)
一.JMS规范 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消 ...
- CSS简介及基本知识
(CSS)cascading style sheets:层叠样式表.级联式样式表,简称:样式表. Sheets :就是一个样式文件,它的扩展名为.css Style:外观,个性化 样式表的位置 为了学 ...
- python基础——继承实现的原理
python基础--继承实现的原理 1 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self) ...
- Struts(九):值栈(OGNL)
引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...
- hdu1087 Super Jumping! Jumping! Jumping!---基础DP---递增子序列最大和
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意: 求递增子序列最大和 思路: 直接dp就可以求解,dp[i]表示以第i位结尾的递增子 ...