电话线

题目链接:https://www.luogu.org/problemnew/show/P1948

二分答案+最短路

我们要求一条1~n的路径,使其中的第k+1大的数最小。

二分第k+1大的数的大小h,比h小的边可以看为0,因为它们不会让第k+1大的数更大;比h大的边边权设为1,最后求出的1~n的最短路,就是在第k+1大的数小于等于h时需要让电信公司承担的电话线数,因为在第k+1大的数的大小限制为h的情况下,任何比h大的数都不可以自己承担。若dis[n]>k返回false,否则返回true。

不知为啥跑的贼慢。。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int INF = ;
struct Edge{          //邻接表
int to;
int w;
int next;
} edge[];
int sum,n,p,k,head[];
void add(int x,int y,int w)
{
edge[++sum].next=head[x];
edge[sum].to=y;
edge[sum].w=w;
head[x]=sum;
}
int dis[];
struct cmp{
bool operator () (int a,int b)
{
return dis[a]>dis[b];
}
};
priority_queue < int , vector<int> , cmp > q;
void clear(priority_queue< int , vector<int> , cmp > &qq)  //清空队列
{
priority_queue < int , vector<int> , cmp > empty;
swap(qq,empty);
}
bool dijkstra(int _std)      //堆优化dijkstra
{
for(int i=;i<=n;i++)
dis[i]=INF;
bool v[]={};
clear(q);
q.push();
dis[]=;
while(!q.empty())
{
int k=q.top();
q.pop();
if(v[k]) continue;
v[k]=;
for(int i=head[k];i;i=edge[i].next)
{
int j=edge[i].to;
if(!v[j]&&dis[j]>int(edge[i].w>_std)+dis[k])
dis[j]=int(edge[i].w>_std)+dis[k];
q.push(j);
} }
return dis[n]<=k;
}
int main()
{
scanf("%d%d%d",&n,&p,&k);
int x,y,w;
for(int i=;i<=p;i++)
{
scanf("%d%d%d",&x,&y,&w);
add(x,y,w);
add(y,x,w);
}
int l=,r=;
while(l<r)    //二分
{
int mid=(l+r)>>;
if(dijkstra(mid)) r=mid;
else l=mid+;
}
if(l==) l=-;
printf("%d\n",l);
return ;
}

最新文章

  1. [poj2492]A Bug&#39;s Life(并查集+补集)
  2. java list倒序输出及复制list集合
  3. truncate/drop表非常慢,怎么办?用硬链接,极速体验
  4. md5的一些用法
  5. Confluence Wiki Markup &amp; Markdown
  6. IoC容器的初始化过程
  7. 【HDOJ】4355 Party All the Time
  8. 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播
  9. Mysql----浅入浅出之视图、存储过程、触发器
  10. [SOJ]1753 解码
  11. POJ1275出纳员的雇佣【差分约束】
  12. linux下安装log4cplus
  13. [Vijos 2024]无向图最短路径
  14. 最强Hibernate搭建文章(转)
  15. Ionic package Error: Registry returned 404 for GET on
  16. og4j日志文件乱码问题的解决方法
  17. Visual Studio 2013 如何在停止调试Web程序后阻止IIS Express关闭
  18. Linux系统编程:线程控制
  19. Linux 入门记录:三、Linux 文件基本操作管理
  20. Python 简单说明与数据结构

热门文章

  1. idea进行断点快捷键
  2. python3+Appium自动化11-data数据封装之python读取csv文件
  3. [转]HTML字符实体(Character Entities),转义字符串(Escape Sequence)
  4. [转]href=&quot;#&quot;与javascript:void(0)的区别
  5. tinkphp3.2.3 关于事务处理。
  6. Murano Weekly Meeting 2016.07.12
  7. Windows下Redis数据库管理工具(redis-desktop-manager)安装与配置(图文详解)
  8. rman对应format参数说明
  9. Unicode汉字编码表以及参考源码分享
  10. ETL模型设计