1266: [AHOI2006]上学路线route
1266: [AHOI2006]上学路线route
Description
Input
Output
Sample Input
1 2 1 3
2 6 1 5
1 3 1 1
3 4 1 1
4 6 1 1
5 6 1 2
1 5 1 4
Sample Output
5
HINT
2<=N<=500, 1<=M<=124 750, 1<=ti, ci<=10 000
合肥市的公交网络十分发达,你可以认为任意两个车站间都可以通过直达或转车互相到达,当然如果在你提供的删除方案中,家和学校无法互相到达,那么则认为上学需要的最短为正无穷大:这显然是一个合法的方案。
1 #include <queue> 2 #include <cstdio> 3 #include <cctype> 4 #include <cstring> 5 6 const int MAXN=510; 7 const int INF=0x3f3f3f3f; 8 9 int n,m; 10 11 int f[MAXN][MAXN],dep[MAXN<<1],cur[MAXN<<1]; 12 13 struct node { 14 int x,y; 15 int val; 16 int fee; 17 }; 18 node e[MAXN*MAXN]; 19 20 struct edge { 21 int to; 22 int val; 23 int next; 24 edge() {} 25 edge(int to,int val,int next):to(to),val(val),next(next){} 26 }; 27 edge Edge[MAXN*MAXN*10]; 28 29 int head[MAXN<<1],tot=1; 30 31 inline void read(int&x) { 32 int f=1;register char c=getchar(); 33 for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar()); 34 for(;isdigit(c);x=x*10+c-48,c=getchar()); 35 x=x*f; 36 } 37 38 inline void add(int x,int y,int val) { 39 Edge[++tot]=edge(y,val,head[x]); 40 head[x]=tot; 41 Edge[++tot]=edge(x,0,head[y]); 42 head[y]=tot; 43 } 44 45 inline int min(int a,int b) {return a<b?a:b;} 46 47 inline bool bfs() { 48 std::queue<int> q; 49 for(int i=1;i<=n;++i) cur[i]=head[i],dep[i]=-1; 50 q.push(1);dep[1]=0; 51 while(!q.empty()) { 52 int u=q.front(); 53 q.pop(); 54 for(int i=head[u];i;i=Edge[i].next) { 55 int v=Edge[i].to; 56 if(Edge[i].val&&dep[v]==-1) { 57 dep[v]=dep[u]+1; 58 q.push(v); 59 if(v==n) return true; 60 } 61 } 62 } 63 return false; 64 } 65 66 int dfs(int u,int flow) { 67 if(u==n) return flow; 68 int delat,used=0; 69 for(int&i=cur[u];i;i=Edge[i].next) { 70 int v=Edge[i].to; 71 if(dep[v]==dep[u]+1&&Edge[i].val) { 72 delat=dfs(v,min(Edge[i].val,flow-used)); 73 if(delat) { 74 Edge[i].val-=delat; 75 Edge[i^1].val+=delat; 76 used+=delat; 77 if(used==flow) break; 78 } 79 } 80 } 81 if(used!=flow) dep[u]=-1; 82 return used; 83 } 84 85 inline void dinic() { 86 int ans=0; 87 while(bfs()) ans+=dfs(1,INF); 88 printf("%d\n",ans); 89 return; 90 } 91 92 int hh() { 93 read(n);read(m); 94 memset(f,63,sizeof f); 95 for(int i=1;i<=n;++i) f[i][i]=0; 96 for(int x,y,z,k,i=1;i<=m;++i) { 97 read(e[i].x);read(e[i].y);read(e[i].val);read(e[i].fee); 98 f[e[i].x][e[i].y]=min(e[i].val,f[e[i].x][e[i].y]); 99 f[e[i].y][e[i].x]=f[e[i].x][e[i].y]; 100 } 101 for(int k=1;k<=n;++k) 102 for(int i=1;i<=n;++i) 103 for(int j=1;j<=n;++j) 104 f[i][j]=min(f[i][j],f[i][k]+f[k][j]); 105 printf("%d\n",f[1][n]); 106 for(int i=1;i<=m;++i) { 107 int x=e[i].x,y=e[i].y; 108 if(f[1][x]+e[i].val+f[y][n]==f[1][n]) 109 add(x,y,e[i].fee); 110 if(f[1][y]+e[i].val+f[x][n]==f[1][n]) 111 add(y,x,e[i].fee); 112 } 113 dinic(); 114 return 0; 115 } 116 117 int sb=hh(); 118 int main(int argc,char**argv) {;}
代码
转载于:https://www.cnblogs.com/whistle13326/p/7491964.html
1266: [AHOI2006]上学路线route相关推荐
- BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割
Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...
- 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...
- BZOJ 1266: [AHOI2006]上学路线route
Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...
- 【BZOJ 1266】 [AHOI2006]上学路线route
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第一问是个最短路. 第二问. 利用第一问floyd算出来的任意两点之间的最短路. 那么枚举每一条边(x,y) 如果w[1][x]+c ...
- bzoj1266: [AHOI2006]上学路线route
最短路+最小割 首先如何使最短路变长?就是要每一条最短路都割一条边. 我们求出每个点到点1和点n的距离,就可以知道哪些边在最短路上(一开始没有想到求到0和n的距离,想用floyd,但是n=500,怕超 ...
- bzoj1266【AHOI2006】上学路线route
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MB Submit: 1602 Solved: 559 [ Subm ...
- 【BZOJ1266】【AHOI2006】上学路线route 最短路建图转最小割
题解: 首先那个裸的单源最短路过程就过了吧. 然后说转的最小割. 就是我们考虑到从源点到汇点有多条最短路,我们需要切断一些边,使得所有的最短路都被切断. 首先这是个很裸的模型,切断?最小割! 如果你想 ...
- codevs2693 上学路线(施工)
难度等级:黄金 2693 上学路线(施工) 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南北方向a条街道从西到东依次编号为1到 ...
- Codevs 2505 上学路线 (组合数学)
2505 上学路线 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 因为是学生,所以显然小A每天都要上学.小A所在的城市的道路构 ...
最新文章
- 【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
- Directory File Disk Searcher
- composer安装其实可以很简单 两行命令就解决了
- UIView的clipsTobounds属性
- C#-获取某变量类型的默认值
- 如何逃过taint droid的跟踪
- 【开发工具】之linux下makefile编写
- java中的过滤器与监听器
- 内存不足时Android 系统如何Kill进程
- css鼠标hover的时候变成小手型
- 计算机科学型,函数计算器1005B学生专用 多功能计算机科学函数型
- GPS测量中涉及的坐标系
- C语言计算机二级选择题重点,2014年计算机二级C语言重点选择题笔试复习资料.doc...
- uniapp如何使用uview中的loadmore上拉加载
- win7计算机序列号在哪里,win7系统如何查看主板序列号?win7系统查看主板序列号的详细步骤图文教程...
- 【Paper】2013_Attitude and Altitude Controller Design for Quad-Rotor Type MAVs
- git 设置代理的方法
- 《王牌特工2:黄金圈》观后感
- 学习计算机视觉,你必须了解的基础概念
- win10计算机本地无法连接,win10系统电脑本地连接不见了解决方法
热门文章
- mac m1下golang连接mysql极速入门
- 好看的按钮组件_这个发光的外骨骼盔甲是什么?为什么它如此好看!
- Linux内核如何管理内存
- 最受Linux程序员欢迎的7个代码编辑器的介绍及下载地址
- java数据库易错程序题_JAVA程序改错 (易错题)(示例代码)
- 树莓派连接7寸屏幕(7DP-CAPLCD)的配置笔记
- [攻防世界 pwn]——level0
- In-Loop Filters in HEVC
- 第 5 章 Spring AOP: Spring之面向方面编程
- java对象锁与类锁区别