正题

题目链接:https://www.luogu.com.cn/problem/P4300


题目大意

nnn个点mmm条边的无向图。求1∼n1\sim n1∼n的最短路和删除cic_ici​和最小的边使得最短路变长。


解题思路

显然我们需要跑一次最短路。

之后考虑如何求第二问,我们发现我们要割掉最短路上的边,所以我们只要把最短路树(一张有最短路上的边构成的DAGDAGDAG)构出来然后在上面求最小割就好了。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=510,inf=2147483647/3;
struct edge_node{int x,y,w,c;
}e[124760];
struct point{int pos,val;
};
struct node{int to,next,w;
}a[124760*2];
bool operator<(point x,point y)
{return x.val>y.val;}
int n,m,s,t,tot,f[N],ls[N],dep[N],ans;
bool v[N];queue<int> qq;
priority_queue<point> q;
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
void dij(){memset(f,0x3f,sizeof(f));q.push((point){1,0});f[1]=0;while(!q.empty()){int x=q.top().pos;q.pop();if(v[x])continue;v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;if(!v[y])q.push((point){y,f[y]});}}}return;
}
bool bfs(){while(!qq.empty())qq.pop();qq.push(1);memset(dep,0,sizeof(dep));dep[s]=s;while(!qq.empty()){int x=qq.front();qq.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[y]||!a[i].w)continue;dep[y]=dep[x]+1;if(y==t)return 1;qq.push(y);}}return 0;
}
int dinic(int x,int flow){if(x==t)return flow;int rest=0,k;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[x]+1!=dep[y]||!a[i].w)continue;rest+=(k=dinic(y,min(a[i].w,flow-rest)));a[i].w-=k;a[i^1].w+=k;if(flow==rest)return flow;}if(!rest)dep[x]=0;return rest;
}
void dfs(int x,int fa){v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(f[y]+a[i].w==f[x])if(!v[y])dfs(y,x);}
}
int main()
{scanf("%d%d",&n,&m);s=1;t=n;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&e[i].x,&e[i].y,&e[i].w,&e[i].c);addl(e[i].x,e[i].y,e[i].w);addl(e[i].y,e[i].x,e[i].w);}dij();tot=1;memset(v,0,sizeof(v));dfs(n,n);memset(ls,0,sizeof(ls));for(int i=1;i<=m;i++){if(!v[e[i].x]||!v[e[i].y])continue;if(f[e[i].x]+e[i].w==f[e[i].y]){addl(e[i].x,e[i].y,e[i].c);addl(e[i].y,e[i].x,0);}if(f[e[i].y]+e[i].w==f[e[i].x]){addl(e[i].x,e[i].y,0);addl(e[i].y,e[i].x,e[i].c);}}while(bfs())ans+=dinic(s,inf);printf("%d\n%d\n",f[n],ans);
}

P4300-[AHOI2006]上学路线【网络流,最短路】相关推荐

  1. 1266: [AHOI2006]上学路线route

    1266: [AHOI2006]上学路线route Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛 ...

  2. 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route

    题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...

  3. 【BZOJ1266】【AHOI2006】上学路线route 最短路建图转最小割

    题解: 首先那个裸的单源最短路过程就过了吧. 然后说转的最小割. 就是我们考虑到从源点到汇点有多条最短路,我们需要切断一些边,使得所有的最短路都被切断. 首先这是个很裸的模型,切断?最小割! 如果你想 ...

  4. BZOJ 1266: [AHOI2006]上学路线route

    Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...

  5. BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割

    Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...

  6. bzoj1266: [AHOI2006]上学路线route

    最短路+最小割 首先如何使最短路变长?就是要每一条最短路都割一条边. 我们求出每个点到点1和点n的距离,就可以知道哪些边在最短路上(一开始没有想到求到0和n的距离,想用floyd,但是n=500,怕超 ...

  7. 【BZOJ 1266】 [AHOI2006]上学路线route

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第一问是个最短路. 第二问. 利用第一问floyd算出来的任意两点之间的最短路. 那么枚举每一条边(x,y) 如果w[1][x]+c ...

  8. bzoj1266【AHOI2006】上学路线route

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec   Memory Limit: 162 MB Submit: 1602   Solved: 559 [ Subm ...

  9. codevs2693 上学路线(施工)

    难度等级:黄金 2693 上学路线(施工) 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南北方向a条街道从西到东依次编号为1到 ...

  10. Codevs 2505 上学路线 (组合数学)

    2505 上学路线 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 因为是学生,所以显然小A每天都要上学.小A所在的城市的道路构 ...

最新文章

  1. atomic原子类实现机制_JUC学习笔记--Atomic原子类
  2. fatal error LNK1103: debugging information corrupt; recompile module
  3. java基础—Properties集合
  4. Python中的浅复制(shallow copy)和深复制(deep copy)
  5. Feature Scaling(特征缩放)的一些方法和使用选择
  6. xmind使用教程思维导图
  7. asp.net多语言设置方法
  8. 30分钟 带你浅入seajs源码
  9. copula matlab,基于matlab编程Copula理论及应用实例源码程序
  10. 正宇控股带你认识区块链技术
  11. 职场:IT女性的困扰
  12. 《大 道 至 简   ——软件工程实践者的思想 》是懒人造就了方法读后感
  13. gentoo命令行刻录
  14. php超清壁纸,美得让人不能呼吸、4K超清壁纸3840×2160p超多图[小水管勿进]
  15. 这篇文章讲了一个新科技
  16. 匠客传媒:论文降重的必备技巧
  17. 【数据结构与算法】二叉树(下)
  18. poc测试环境准备_华为桌面云 【环境搭建类】 Poc测试经验总结-环境搭建
  19. 物联网技术与应用【第五章测验答案】
  20. 吉大计算机学院周丰丰,周丰丰-吉林大学计算机科学与技术学院

热门文章

  1. 如何备份服务器日志到其他服务器_KIWI Syslog日志服务器搭建及配置
  2. java导出mysql数据库失败_利用Java进行MySql数据库的导入和导出
  3. java printwriter 文件_java – 如何使用printwriter创建和写入文件
  4. fb静态区域_fb 静态数据
  5. linux系统中常见的目录,Linux系统中常见的目录名称以及相应内容
  6. github可以传java吗_如何在github上传本地项目代码(新手使用)----亲测使用
  7. 线程与线程池(一条龙详解)
  8. 过去3个多月的1200个小时里,我收获了什么?| 2021年年中总结
  9. [RabbitMQ]队列持久化
  10. Java 实例 - 队列(Queue)用法