【bzoj1614】【Usaco2007 Jan】Telephone Lines架设电话线 (spfa+二分)题解&代码
来源:互联网 发布:李婧磁 知乎 编辑:程序博客网 时间:2024/06/04 22:47
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=1614
题解:
刚开始没看清题,以为是spfa中记录路径,后来发现花费只是多余花费中最大的花费,那么我们就可以二分这个最大花费,将路径中大于这个花费的边全部交给电力公司去做,看它是否能做完。
代码:
#include<iostream>#include<algorithm>#include<stdio.h>#include<queue>#define maxn (10005)using namespace std;struct node{ int next;int v;int w;}edge[maxn*2];int n,m,k,dis[1005],head[1005],tot,vis[1005];queue<int>q;void add(int u,int v,int d){ tot++; edge[tot].v=v; edge[tot].w=d; edge[tot].next=head[u]; head[u]=tot;}void init(){ for (int i=1;i<=n;i++) { dis[i]=9999999; vis[i]=0; }}int bfs(int x){ init(); while(!q.empty())q.pop(); q.push(1); vis[1]=1; dis[1]=0; while(!q.empty()) { int now=q.front();q.pop();vis[now]=0; for (int i=head[now];i!=0;i=edge[i].next) { int v=edge[i].v; int d=edge[i].w>x?1:0;//大于x为1小于为0 if (dis[v]>dis[now]+d) { dis[v]=dis[now]+d; if (vis[v]==0) { q.push(v); vis[v]=1; } } } } return dis[n];//dis表示当最大花费为x时,最少有多少条边需要交给电力公司}int main(){ scanf("%d%d%d",&n,&m,&k); for (int i=1;i<=m;i++) { int x,y,d; scanf("%d%d%d",&x,&y,&d); add(x,y,d); add(y,x,d); } if (bfs(-1)==9999999) { printf("-1\n"); return 0; } int l=0,r=1000000; int ans=0; while(l<=r) { int mid=(l+r)/2; //cout<<l<<' '<<r<<endl; if (bfs(mid)<=k) ans=mid,r=mid-1; else l=mid+1; } printf("%d\n",ans);}
0 0
- 【bzoj1614】【Usaco2007 Jan】Telephone Lines架设电话线 (spfa+二分)题解&代码
- bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线(spfa+二分答案)
- [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
- BZOJ1614: [Usaco2007 Jan]Telephone Lines架设电话线
- [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
- bzoj1614【Usaco2007 Jan】Telephone Lines 架设电话线
- bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
- SPFA+二分-BZOJ-1614-[Usaco2007 Jan]Telephone Lines架设电话线
- 【BZOJ 1614】: [Usaco2007 Jan]Telephone Lines架设电话线 spfa+二分
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线 二分+spfa
- BZOJ1614 [Usaco2007 Jan]Telephone Lines架设电话线 二分/魔性剪枝/最小边长连通
- bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线(二分+SPFA)
- [Usaco2007 Jan]Telephone Lines架设电话线
- 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- [Usaco2007 Jan]Telephone Lines架设电话线
- 1614: [Usaco2007 Jan]Telephone Lines架设电话线
- (1614 [Usaco2007 Jan]Telephone Lines架设电话线)
- BZOJ [Usaco2007 Jan]Telephone Lines架设电话线(POJ 3662)
- mysql存储过程 例子 游标cursor 循环嵌套 事物
- JAVA多线程和并发基础面试问答
- 【BZOJ 1614】: [Usaco2007 Jan]Telephone Lines架设电话线 spfa+二分
- Android之免费短信验证Mob
- 作用域public/private/protected的具体区别
- 【bzoj1614】【Usaco2007 Jan】Telephone Lines架设电话线 (spfa+二分)题解&代码
- 新增的C语言完整源代码
- 页面点击统计集成
- shell 下不能使用tab补全命令
- 解析src下的xml配置文件最简单的方法
- OpenCV中C++函数imread读取图片的缩放问题
- Python中str(x) 与``与repr(x)区别
- [ViewPager、二]ViewPager 小圆点 动态添加
- [转]MySQL存储过程调试工具(dbForge Studio for MySQL工具)