博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
715B Complete The Graph
阅读量:6040 次
发布时间:2019-06-20

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

题目大意

给出一个图,一些边带权,另一些边等待你赋权(最小赋为1).请你找到一种赋权方式,使得 s 到 t 的最短路为 L

n ≤ 1e3 ,m ≤ 1e4 ,L ≤ 1e9

分析

二分所有边的边权和

使得二分后第p条边权值为k,1~p-1条边权值为inf,剩余边权值为1

对于每种情况跑一次最短路

如果结果小于L则增大点权和否则减少

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define int long longconst int inf = 0x3f3f3f3f;int n,m,s,t,L,d[10010],vis[10010];priority_queue
>q;struct node { int x,y,z;};node a[10010];int head[20020],w[20020],to[20020],nxt[20020],cnt;vector
wh;inline void add(int i){ int x=a[i].x,y=a[i].y,z=a[i].z; nxt[++cnt]=head[x]; head[x]=cnt; to[cnt]=y; w[cnt]=z; nxt[++cnt]=head[y]; head[y]=cnt; to[cnt]=x; w[cnt]=z;}inline void dij(){ d[s]=0; q.push(make_pair(0,s)); while(!q.empty()){ int x=q.top().second; q.pop(); if(vis[x])continue; vis[x]=1; for(int i=head[x];i;i=nxt[i]){ int y=to[i],z=w[i]; if(d[y]>d[x]+z){ d[y]=d[x]+z; q.push(make_pair(-d[y],y)); } } }}inline int ck(int mid){ int i,j,k; for(i=0;i
L||ck(ri)
1){ int mid=(le+ri)>>1; if(ck(mid)<=L)le=mid; else ri=mid; } ck(le); for(i=1;i<=m;i++)printf("%lld %lld %lld\n",a[i].x-1,a[i].y-1,a[i].z); return 0;}

转载于:https://www.cnblogs.com/yzxverygood/p/10351735.html

你可能感兴趣的文章
linux驱动之一语点破天机
查看>>
十二、python开发之内置函数
查看>>
既然选择远方,便只顾风雨兼程
查看>>
Windows下访问Linux的远程控制软件
查看>>
20145222《信息安全系统设计基础》我的第1-6周考试错题汇总
查看>>
zabbix3.0.4安装grapha实现多台主机相同监控项集中展示
查看>>
zabbix-3.0.4添加对windows 2008r2的监控
查看>>
webapp 尺寸相关
查看>>
至道学宫
查看>>
常用纹理数据库
查看>>
1999 - 2009的集训队论文
查看>>
java 检测代理IP是否准确
查看>>
Es学习第十课,ElasticSearch集群搭建
查看>>
centos 7 部署 open-falcon 0.2.0
查看>>
如何利用反射简化Servlet操作
查看>>
Java语言实现简单FTP软件------>FTP软件主界面的实现(四)
查看>>
Virtualbox报错------> VirtualBox虚拟机下鼠标不正常的解决方法
查看>>
Java 中时间处理SimpleDateFormat 中HH和hh的区别
查看>>
java中Collections.sort排序详解
查看>>
C语言基础学习day08
查看>>