题目大意:给出一个图,顶点为1到n和一个值k,求出包含顶点1到顶点n的通路的子图中,第k+1大的边最短为多少?(若存在一条从1到n路径边数小于等于k,则返回0,若不存在通路,返回-1)

思路:一开始我连题都看错了,还以为是动规,汗···

很显然,此题不好从正面下手,即如果从找到路径下手的话会变得相当棘手,于是想到枚举边,以某一边作为子图中第k+1大的边,看是否是可行解:比它大的边的权值为1,反之为0,用spfa算出1到n的最短路,若路径长大于k则二分查找比m更大的边,反之则查找更小的边,并可用e[0]=0表示权值为零的边(即路径上边数小于k),这样就不难得出正确解了。算法时间为O(nlgn)。

代码如下:

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("phone.in");
ofstream fout("phone.out");
int graph[1001][1001],matrix[1001][1001];
bool status[10001];
typedef struct
{
int start,end;
int w;
}Bian;
Bian bian[10001];
int d[1001];
int Q[10001];
int partion(Bian *a,int start,int end)
{
int j=start-1;
Bian t;
for(int i=start;i<=end;i++)
{
if(a[i].w<=a[end].w)
{
j++;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
return j;
}
int quicksort(Bian *a,int start,int end)
{
if(start>=end)
return 0;
int j=partion(a,start,end);
quicksort(a,start,j-1);
quicksort(a,j+1,end);
return 0;
}
int initial(int n)
{
for(int i=0;i<=n;i++)
d[i]=10000000;
return 0;
}
int spfa(Bian *m,int n)
{
initial(n);
d[1]=0;
int head=1,tail=1,t=0,i=0,x=0;
Q[1]=1;
while(((tail+1)000)!=head)
{
t=Q[head];
head++;
head%=10000;
for(i=1;i<=graph[t][0];i++)
{
x=0;
if(matrix[t][graph[t][i]]>m->w)
x=1;
if(d[graph[t][i]]>d[t]+x)
{
d[graph[t][i]]=d[t]+x;
tail++;
Q[tail]=graph[t][i];
tail%=10000;
}
}
}
return d[n];
}
int bins(int n,int p,int start,int end,int k)
{
if((end<0||start>p)||(start>end))
return -1;
int m=(start+end)/2;
if(spfa(&bian[m],n)>k)
return bins(n,p,m+1,end,k);
else
{
int t=bins(n,p,start,m-1,k);
if(t==-1)
return m;
return t;
}
}
int main()
{
ios::sync_with_stdio(0);
int N=0,P=0,K=0,i=0,x=0,y=0,z=0;
fin>>N>>P>>K;
for(i=1;i<=P;i++)
{
fin>>x>>y>>z;
graph[x][0]++;
graph[x][graph[x][0]]=y;
graph[y][0]++;
graph[y][graph[y][0]]=x;
matrix[x][y]=z;
matrix[y][x]=z;
bian[i].start=x;
bian[i].end=y;
bian[i].w=z;
}
quicksort(bian,1,P);
i=bins(N,P,0,P,K);
if(i<0)
fout<<-1<<endl;
else
fout<<bian[i].w<<endl;
return 0;
}

这道题说明将适当的对象作为枚举对象是重要的思想方法。

转载于:https://www.cnblogs.com/kliner/archive/2012/10/12/noi2008_2_phone.html

NOI导刊模拟2—电话网络 解题报告相关推荐

  1. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  2. 20161003 NOIP 模拟赛 T2 解题报告

    Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...

  3. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  4. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  5. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  6. NOI2021模拟测试赛 解题报告

    (一) A 暴力:求出所有直线的解析式,对于每个点枚举所有直线看是否经过该点 优化:分块.关键是分块方式,这里是把平面分成sqrt(n)*sqrt(n)块 实现细节: 1.vector直接开二维来表示 ...

  7. 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...

  8. [NOI导刊2010提高]黑匣子

    OJ题号:洛谷1801 思路:建立一个大根堆.一个小根堆.大根堆维护前i小的元素,小根堆维护当前剩下的元素. 1 #include<cstdio> 2 #include<queue& ...

  9. 【NOI导刊】【归并排序求逆序对】最接近神的人

    题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着"神的殿堂".小FF猜 ...

最新文章

  1. 从几何与代数的角度推算坐标旋转变换矩阵(以2维为例)
  2. windows 搭建kms服务器激活_自建KMS激活服务器的两种方法
  3. JS中获取元素的第二种方法
  4. vue 获取响应头里set-cookie的值_最简化 VUE的响应式原理
  5. Visual Studio提示——DebuggerDisplay
  6. easyui源码翻译1.32--Window(窗口)
  7. Vc数据库编程基础1
  8. 【Matlab元胞自动机】元胞自动机双边教室疏散【含源码 1208期】
  9. Python通过IMAP实现邮箱客户端
  10. Game Master(思维 + 贪心)
  11. ardupilot 关于设备车Rover的学习《2》------如何解锁
  12. 汽车修理厂计算机管理,最新汽车维修厂管理系统
  13. ESP32基于arduino开发的心跳体温检测系统(四)本地端系统整合
  14. JavaScript创始人Brendan Eich访谈录
  15. Halcon高斯背景估计--estimate_background_illumination
  16. 网页版ASN1解码工具使用教程
  17. 国产网游的悲哀!毁掉国产网游的七大恶心设定
  18. X005---alteryx的工作流程配置
  19. 广播BroadcastReceiver使用
  20. 2014年10月18日汇顶科技公司笔试记录

热门文章

  1. JS 开发常用工具函数
  2. 杭州高职单招计算机试题,河北省高职单招职业技能练习题20
  3. jvm 崩溃日志设置_JVM致命错误日志(hs_err_pid.log)分析(转载)
  4. linux 信号和信号量编程
  5. 写给初中级前端的高级进阶指南等
  6. java8新特性stream深入解析
  7. HTTP Server Error 500 内部服务器错误
  8. leetcode-191-Number of 1 Bits
  9. 【SSH高速进阶】——struts2简单的实例
  10. 新秀翻译(两)——使用Java通用配置模板方法模式