题意:给定一个无向图,删除某些边有一定的代价,要求删掉使得最短路径减小,求最小代价。

首先要spfa求出起点到各个点的最短距离。对于一条权值为w,起点为i,终点为j的边,设dis[k]为起点到k点的距离,若dis[j]=dis[i]+w,则将该边加入另一个图里,边的容量为删除这条边的代价,则从起点到终点的最大流即为答案。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; const int inf=0x3fffffff;
const int Maxn=1100000; int to[Maxn],nxt[Maxn],first[Maxn],t[Maxn],c[Maxn];
int w[Maxn],too[Maxn],nxtt[Maxn],firstt[Maxn];
int n,m,ti,co,u,v,tot=1,e[Maxn];
int b[Maxn],cur[Maxn],dis[Maxn]; inline void add(int u,int v,int ti,int co) {
to[tot]=v;
nxt[tot]=first[u];
t[tot]=ti;
c[tot]=co;
first[u]=tot++;
} inline void add(int u,int v,int wi) {
too[tot]=v;
w[tot]=wi;
nxtt[tot]=firstt[u];
firstt[u]=tot++;
} void spfa() {
queue<int>q;
memset(dis,0x3f,sizeof(dis));
memset(e,0,sizeof(e));
q.push(1);
dis[1]=0;
while(!q.empty()) {
int now=q.front();
q.pop();
e[now]=0;
for(int i=first[now];i;i=nxt[i])
if(dis[to[i]]>dis[now]+t[i]) {
dis[to[i]]=dis[now]+t[i];
if(e[to[i]]==0) {
q.push(to[i]);
e[to[i]]=1;
}
}
}
} bool bfs() {
queue<int>q;
q.push(1);
memset(b,0,sizeof(b));
b[1]=1;
while(!q.empty()) {
int now=q.front();
q.pop();
for(int i=firstt[now];i;i=nxtt[i])
if(w[i]&&b[too[i]]==0) {
b[too[i]]=b[now]+1;
q.push(too[i]);
}
}
return b[n];
} int dfs(int root,int flow) {
if(root==n) return flow;
for(int &i=cur[root];i;i=nxtt[i])
if(b[too[i]]==b[root]+1&&w[i]) {
int temp=dfs(too[i],min(w[i],flow));
if(temp) {
w[i]-=temp;
w[i^1]+=temp;
return temp;
}
}
return 0;
} int dinic() {
int ans=0,temp;
while(bfs()) {
memcpy(cur,firstt,sizeof(cur));
while(temp=dfs(1,inf))
ans+=temp;
}
return ans;
} int main() {
// freopen("test.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) {
scanf("%d%d%d%d",&u,&v,&ti,&co);
add(u,v,ti,co);
add(v,u,ti,co);
}
spfa();
tot=2;
for(int i=1;i<=n;i++)
for(int j=first[i];j;j=nxt[j])
if(dis[to[j]]==dis[i]+t[j]) {
add(i,to[j],c[j]);
add(to[j],i,0);
}
printf("%d\n%d\n",dis[n],dinic());
return 0;
}

[AHOI2008]上学路线的更多相关文章

  1. codevs2693 上学路线(施工)

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

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

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

  3. BZOJ 3782: 上学路线 [Lucas定理 DP]

    3782: 上学路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 192  Solved: 75[Submit][Status][Discuss] ...

  4. BZOJ_1266_[AHOI2006]上学路线route_最小割

    BZOJ_1266_[AHOI2006]上学路线route_最小割 Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信 ...

  5. 【最短路+最大流】上学路线@安徽OI2006

    目录 [最短路+最大流]上学路线@安徽OI2006 PROBLEM SOLUTION CODE [最短路+最大流]上学路线@安徽OI2006 PROBLEM 洛谷P4300 SOLUTION 先在原图 ...

  6. BJWC2018上学路线

    题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...

  7. 洛谷 P4478 [BJWC2018]上学路线

    洛谷 P4478 [BJWC2018]上学路线 原题 神仙题orz,竟然没有1A....容斥+卢卡斯+crt?? 首先用容斥做,记\(f[i][0/1]\)表示到i号点经过了奇数/偶数个点的方案数,因 ...

  8. 洛谷——P1958 上学路线_NOI导刊2009普及(6)

    P1958 上学路线_NOI导刊2009普及(6) 题目描述 你所在城市的街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道.南北方向的a条街道从西到东依次编号为l到a,而东西方向的b条街道从 ...

  9. 【BZOJ1266】[AHOI2006]上学路线route Floyd+最小割

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

随机推荐

  1. GOOGLE和百度的长域名

    GOOGLE的变态域名:www.mamashuojiusuannizhucedeyumingzaichanggoogledounengsousuochulai.cn/中文拼音:“妈妈说就算你注册的域名 ...

  2. Dcloud开发-- 打开蓝牙

    这样打开APP就会直接提示是否要打开蓝牙: <script type="text/javascript"> mui.init(); mui.plusReady(func ...

  3. 【模块化开发】------requireJS的基本使用------【巷子】

    前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...

  4. 聊一聊goroutine stack

    通过阅读这篇文章对内存的处理以及栈的扩容有了新的认识,我们在生产环境中也遇到了内存使用量超大的情况,现在怀疑也可能是由于栈扩容导致的 很好的一片文章: 推送在外卖订餐中扮演着重要的角色,为商家实时接单 ...

  5. MySQL逗号分割字段的列转行

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...

  6. Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)

    QPoint pos(0,0);QMouseEvent event0(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt ...

  7. CSS之Flex 布局:语法篇

    网页布局(layout)是 CSS 的一个重点应用. ​ 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如 ...

  8. sshd:root@notty解决方法

    sshd:root@notty解决方法 [复制链接]--http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2050551 cat /e ...

  9. iptables 执行清除命令 iptables -F 要非常小心的

    iptables 执行清除命令 iptables -F 要非常小心的 http://blog.csdn.net/netingcn/article/details/5692972 使用 /sbin/ip ...

  10. python3 函数即变量的使用

    函数即变量的意思是函数被使用时后面不用(),类似变量的使用,具体如下面的示例代码: def say(name): print(name) hi = say hi('你好!') def add(): p ...