【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

第一问是个最短路。
第二问。
利用第一问floyd算出来的任意两点之间的最短路。
那么枚举每一条边(x,y)
如果w[1][x]+cost[x][y]+w[y][n]==w[1][n]
那么就说明(x->y)这条边是某条最短路上的必经边。
则我们在一张新的网络中加入(x,y,pi)这条边。
然后我们求这个网络的最小割。
那么1到n就没有办法通过最短路到达了,因为每条最短路都被破坏了。
讨论里好像说有重边。
pre[1]=0不能省。不然貌似会往回走。。

【代码】

#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std; const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int M = 15e4;
const int N = 500;
const int INF = 0x3f3f3f3f; struct abc{
int x,y,t,p;
}; int n,m,w[N+10][N+10],flow[N+10][N+10];
abc bian[M]; void add_edge(int x,int y,int z){
flow[x][y]+=z;
} queue<int> dl;
int pre[N+10]; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
memset(w,0x3f3f3f3f,sizeof w);
cin >> n >> m;
rep1(i,1,n) w[i][i] = 0;
rep1(i,1,m) {
cin >> bian[i].x >> bian[i].y >> bian[i].t >> bian[i].p;
w[bian[i].x][bian[i].y] = min(w[bian[i].x][bian[i].y],bian[i].t);
w[bian[i].y][bian[i].x] = min(w[bian[i].y][bian[i].x],bian[i].t);
} rep1(k,1,n)
rep1(i,1,n)
if (i!=k)
rep1(j,1,n)
if (j!=k && j!= i && w[i][k]+w[k][j]<w[i][j])
w[i][j] = w[i][k]+w[k][j]; rep1(i,1,m){
int x = bian[i].x,y = bian[i].y,v = bian[i].t;
if (w[1][x]+w[y][n]+v == w[1][n]){
add_edge(x,y,bian[i].p);
}
if (w[1][y]+w[x][n]+v == w[1][n]){
add_edge(y,x,bian[i].p);
}
} cout<<w[1][n]<<endl; int ans = 0;
while (1){
memset(pre,255,sizeof pre);
while (!dl.empty()) dl.pop();
dl.push(1);
pre[1] = 0;
while (!dl.empty()){
int x = dl.front();dl.pop();
for (int i = 1;i <= n;i++)
if (pre[i]==-1 && x!=i && flow[x][i]>0){
pre[i] = x;
dl.push(i);
if (i==n) break;
}
}
if (pre[n]==-1) break;
int temp = 0x3f3f3f3f;
int y = n;
while (1){
int x = pre[y];
//cout<<x<<endl;
if (x==0) break;
temp = min(temp,flow[x][y]);
y = x;
} y = n;
while (1){
int x = pre[y];
if (x==0) break;
flow[x][y]-=temp;
flow[y][x]+=temp;
y = x;
} ans+=temp;
}
cout<<ans<<endl;
return 0;
}

【BZOJ 1266】 [AHOI2006]上学路线route的更多相关文章

  1. BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)

    第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...

  2. bzoj 1266 [AHOI2006] 上学路线 route 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23989499 [原题] 1266: [AHOI2006]上学路线route Time ...

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

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

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

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

  5. BZOJ 1266: [AHOI2006]上学路线route Floyd_最小割

    十分简单的一道题. 图这么小,跑一边 Floyd 就得到第一问最短路径的答案. 考虑第二问怎么求:我们可以先将最短路径组成的图从原图中抽离出来,构成新图 $G$. 我们发现,只要 $G$ 的起点与终点 ...

  6. bzoj 1266 1266: [AHOI2006]上学路线route

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2356  Solved: 841[Submit][S ...

  7. [BZOJ 1266][AHOI2006]上学路线(最短路+最小割)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1266 分析: 很简单的题目,容易想到就是把所有的最短路径挑出来,然后在这个图里跑最小割 ...

  8. bzoj 1266 [AHOI2006] 上学路线

    传送门 传说中的经典容斥+卢卡斯定理+中国剩余定理 题解传送门 //Achen #include<algorithm> #include<iostream> #include& ...

  9. bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2490  Solved: 898[Submit][S ...

  10. bzoj1266 [AHOI2006]上学路线route floyd+最小割

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2490  Solved: 898[Submit][S ...

随机推荐

  1. nyoj 115dijkstar求最短路

    #include<stdio.h> #include<string.h> #define inf 0x3fffffff #define N 1100 int ma[N][N], ...

  2. 推荐几款VisualStudio的插件

    继前几天推荐了一款转换vs插件的插件后,借着安装VS2013之际,把我比较喜欢的几个插件继续推荐一下. C# Outline 2013 2013 C#的代码折叠最小只能到函数级,不像C++那样可以折叠 ...

  3. git-osc自己定义控件之:CircleImageView

    git-osc自己定义控件之:CircleImageView 一.CircleImageView的使用 在项目中能够发现,用户的头像都是圆形的.感觉非常好奇,昨天最终发现了,原来是自定了一个Image ...

  4. plsql解决64位解决办法

    plsql解决64位解决办法 设置PLSQL Developer访问本机64位Oracle 由于在本机Windows Server 2008 R2 X64上安装了64位的Oracle 11.2.0.1 ...

  5. JPA实现一对多(OneToMany)关联

    转自:https://blog.csdn.net/qq_32444825/article/details/77084580 1.考试类 @Entity public classExam impleme ...

  6. git服务器搭建-gitosis

    需求 硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到. 软件需求:git-core, gitosis, openssh-server, openssh-client, Ap ...

  7. Spark standalone运行模式(图文详解)

    不多说,直接上干货! 请移步 Spark standalone简介与运行wordcount(master.slave1和slave2) Spark standalone模式的安装(spark-1.6. ...

  8. 【转】SQL语句删除和添加外键、主键

    --删除外键 语法:alter table 表名 drop constraint 外键约束名 如: alter table Stu_PkFk_Sc drop constraint FK_s alter ...

  9. Sumblime Text3中使用vue-cli创建vue项目,代码不高亮,解决

    问题如下:在Sumblime Text3中打开vue-cli常见的项目,代码一片灰色 解决如下: 第一步:下载文件Vue components  链接 GitHub - vuejs/vue-synta ...

  10. struts2学习之基础笔记5

    第十章 Struts 2的输入校验 1 Struts 2 输入校验原理 a . 分类 validate()方法校验 b . validation框架校验 2 valibate()方法校验实现 步骤  ...