博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu6582
阅读量:5290 次
发布时间:2019-06-14

本文共 2077 字,大约阅读时间需要 6 分钟。

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

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

  1、首先最短路径一定在最短路图上

  2、如果起点和终点不联通,就不存在这样一条最短路径,所以最短路径一定会变大;

注意看范围。。wa17发

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const ll INF=1e18;const int M=1e4+4;struct node{ ll u,v,nextt; ll w;}g[M<<2],e[M<<2];ll s,t,tot1,tot2,cur[M],head1[M],head2[M],vis[M],deep[M];ll dis[M];void addedge1(ll u,ll v,ll w){ g[tot1].u=u; g[tot1].v=v; g[tot1].w=w; g[tot1].nextt=head1[u]; head1[u]=tot1++;}void addedge2(ll u,ll v,ll w){ e[tot2].v=v; e[tot2].w=w; e[tot2].nextt=head2[u]; head2[u]=tot2++; e[tot2].v=u; e[tot2].w=0; e[tot2].nextt=head2[v]; head2[v]=tot2++; }void dij(){ for(int i=0;i<=t;i++) dis[i]=INF;// cout<<"!!"<
que; que.push(s); dis[s]=0; while(!que.empty()){ ll u=que.front(); que.pop(); vis[u]=0; for(ll i=head1[u];~i;i=g[i].nextt){ ll v=g[i].v; if(dis[v]>dis[u]+g[i].w){ dis[v]=dis[u]+g[i].w; if(!vis[v]){ vis[v]=1; que.push(v); } } } }}ll dd[M];bool bfs(){ memset(deep,0,sizeof(deep)); queue
que; que.push(s); deep[s]=1; while(!que.empty()){ int u=que.front(); que.pop(); for(int i=head2[u];i!=-1;i=e[i].nextt){ int v=e[i].v; if(e[i].w>0&&deep[v]==0){ deep[v]=deep[u]+1; if(v==t) return true; que.push(v); } } } return deep[t]==0?false:true;}ll dfs(ll u,ll fl){ if(u==t) return fl; ll ans=0,x=0; for(int i=cur[u];i!=-1;i=e[i].nextt){ ll v=e[i].v; if(e[i].w>0&&deep[v]==deep[u]+1){ x=dfs(v,min(e[i].w,fl-ans)); e[i].w-=x; e[i^1].w+=x; if(e[i].w) cur[u]=i; ans+=x; if(ans==fl) return ans; } } if(ans==0) deep[u]=0; return ans;}ll dinic(){ ll ans=0; while(bfs()){ for(int i=0;i<=t;i++) cur[i]=head2[i]; ans+=dfs(s,INF); } return ans;}int main(){ ll test; scanf("%lld",&test); while(test--){ ll n,m; tot1=tot2=0; scanf("%lld%lld",&n,&m); // cout<
<<"!!"<
<
View Code

 

转载于:https://www.cnblogs.com/starve/p/11456316.html

你可能感兴趣的文章
ubuntu node.js Binaries方式安装(二进制文件安装)
查看>>
Ansible Ad-Hoc Commands
查看>>
sql 修改字段小记
查看>>
现代浏览器的工作原理
查看>>
完美CSS文档的8个最佳实践
查看>>
扒一扒.NET Core的环境配置提供程序
查看>>
python基础之ATM-2
查看>>
《20170926-构建之法:现代软件工程-阅读笔记》
查看>>
js中for循环闭包问题记录
查看>>
关于xxx.h file not found 的问题
查看>>
CS224n学习资源汇总
查看>>
部署web Service到tomcat
查看>>
java使用sax解析xml
查看>>
20个常用正则表达式
查看>>
hdfs切片的计算方式
查看>>
yolo源码解析(一)
查看>>
UVA-10061 How many zero's and how many digits ? (数论)
查看>>
关于阿西莫夫
查看>>
深深自责
查看>>
Nessus安装出现localhost:8834无法访问
查看>>