P1099 树网的核
NOIP 2007 提高第四题。
啊......我还是看了题解才做出来的。
这题乍一看毫无头绪,但是我们spy on一下,暗中观察发现:n才300!随便打暴力水过去啊!
然后,这破题怎么暴力?感觉我的spfa,dijkstra都WA2了...
最后还是跑去看了题解。
一步一步慢慢模拟就出来了。
首先,肯定要跑floyd的。
然后,我们居然还要个邻接表来存图......(用来dfs求直径)
无脑Floyd的同时,记录一条直径的起点,终点。
find_d求了一条直径上的所有点。
然后find_f求出了直径上每个点不超过s能去的最远点。
然后对于每段直径上小于s的路径,求出每个点的min的max作为偏心距,然后再求min。
然后输出,成功。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int chart[][],n,s,top,d;
struct Edge
{
int u,v,len,next;
}edge[];
int point_e[],d_f[][],topd;///0dian 1xiabiao
bool vis[];
void add(int x,int y,int z)
{
top++;
edge[top].u=x;
edge[top].v=y;
edge[top].len=z;
edge[top].next=point_e[x];
point_e[x]=top;
return;
}
///
bool find_d(int a,int b)
{
if(a==b)
{
d_f[++topd][]=b;
return ;
}
if(vis[a]) return ;
vis[a]=;
int i=point_e[a];
while(i)
{
if(find_d(edge[i].v,b))
{
d_f[++topd][]=a;
vis[a]=;
return ;
}
i=edge[i].next;
}
vis[a]=;
return ;
}
void find_f(int k)
{
int i=k;
for(;i<=topd;i++)
{
if(chart[d_f[k][]][d_f[i][]]>s) break;
}
i--;
d_f[k][]=i;
return;
}
int find_ans(int k)
{
int ans=,now=;
for(int i=;i<=n;i++)
{
now=;
for(int j=k;j<=d_f[k][];j++)
{
now=min(now,chart[i][d_f[j][]]);
}
ans=max(ans,now);
}
return ans;
}
int main()
{
memset(chart,0x3f,sizeof(chart));
scanf("%d%d",&n,&s);
for(int i=;i<=n;i++) chart[i][i]=;
int x,y,z;
for(int i=;i<n;i++)
{
scanf ("%d%d%d",&x,&y,&z);
chart[x][y]=chart[y][x]=z;
add(x,y,z);
add(y,x,z);
}
int da,db;
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(chart[i][j]>chart[i][k]+chart[k][j])
{
chart[i][j]=chart[i][k]+chart[k][j];
if(chart[i][j]>d)
{
d=chart[i][j];
da=i;db=j;
}
}
}
}
}
///
/**
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",chart[i][j]);
}
printf("\n");
}
*/
///
find_d(da,db);
for(int i=;i<=topd;i++) find_f(i);
///
/**
for(int i=1;i<=topd;i++) printf("%d ",d_f[i][0]);
printf("\n");
for(int i=1;i<=topd;i++) printf("%d ",d_f[i][1]);
*/
///
int now,ans=;
for(int i=;i<=topd;i++)
{
now=find_ans(i);
//printf("find_ans(%d)=%d\n",i,now);
ans=min(ans,now);
}
printf("%d",ans);
return ;
}
AC代码在此
这个纯暴力模拟题居然是蓝题...说明了我的暴力功力还不够。以后还要练搜索剪枝的。先做点USACO吧。
(logeadd:133行代码怎么不能是蓝题了?好像有点道理啊...)
P1099 树网的核的更多相关文章
- 洛谷 P1099 树网的核
P1099 树网的核 题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W ...
- bzoj1999 / P1099 树网的核
P1099 树网的核 (bzoj数据加强) 前置知识:树的直径 (并不想贴我的智障写法虽然快1倍但内存占用极大甚至在bzoj上MLE) 正常写法之一:用常规方法找到树的直径,在直径上用尺取法找一遍,再 ...
- P1099 树网的核——模拟+树形结构
P1099 树网的核 无根树,在直径上找到一条长度不超过s的路径,使得最远的点距离这条路径的距离最短: 首先两遍dfs找到直径(第二次找的时候一定要吧father[]清零) 在找到的直径下枚举长度不超 ...
- P2491 消防/P1099 树网的核
P2491 消防/P1099 树网的核 双倍经验,双倍快乐. 题意 在一个树上选择一段总长度不超过\(s\)的链使所有点到该链距离的最大值最小. 输出这个最小的值. 做法 Define:以下\(s\) ...
- [NOIP2007] 提高组 洛谷P1099 树网的核
题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...
- P1099 树网的核 && P2491 [SDOI2011]消防
给定一棵树, 你可以在树的直径上确定一条长度不超过 \(S\) 的链, 使得树上离此链最长的点距离最小, 输出这个距离 P2491 数据范围为 P1099 的 \(1000\) 倍 Solution ...
- #P1099 树网的核 题解
题目描述 pdf 题解 这一题,刚开始看题目感觉好像很难,题目又长……一看数据范围,呵呵. 已经给出来这是个DAG,所以不用担心连通性的问题.那么怎么做呢? 朴素的做法是把树的直径的两个端点都统计出来 ...
- 洛谷P1099 树网的核
传送门 80分 $ Floyd $ 树的直径可以通过枚举求出.直径的两个端点$ maxi,maxj $ ,由此可知对于一个点 $ k $ ,如果满足 $ d[maxi][k]+d[k][maxj]== ...
- 2018.11.06 洛谷P1099 树网的核(最短路+枚举)
传送门 之前看李煜东的书一直感觉是道神题. 然后发现这题数据范围只有300?300?300? 直接上floydfloydfloyd然后暴力就完了啊. 代码: #include<bits/stdc ...
随机推荐
- LVM常规操作记录梳理(扩容/缩容/快照等)
基本介绍Linux用户安装Linux 操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间.随着 Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解, l ...
- 【Beta阶段】第六次Scrum Meeting!
每日任务内容: 本次会议为第六次Scrum Meeting会议~ 由于本次会议项目经理召开时间为9:30,在公寓1楼会客室召开,召开时长约30分钟,探讨了本次取得的重大突破后需要继续开展的工作. 队员 ...
- pair work结对编程(张艺 杨伊)
一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点: 优点: 1.结对编程时间紧密,在一定程度上可以督促双方学习,提高 ...
- SCRUM 12.21
从爬虫遇到的问题中我们学会了: 1.有的网站是有反爬虫机制的,外卖网站(我们猜测基本所有盈利性质的网站可能都是)全部都有. 2.我们对于反爬虫机制有了一定的了解. 本次爬虫测试中,我们最后连美团网 ...
- 20135327郭皓--Linux内核分析第七周 可执行程序的装载
第七周 可执行程序的装载 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ...
- JavaScript表单验证登录
在登录时,通常是将输入的信息原封不动的传送给后端的处理程序,然后处理之后返回结果,那么可能后端服务器的压力就很大,所以可以先在提交表单之前进行一些简单的检测,然后再发给后端,减小服务器的一部分压力: ...
- Spring Cloud集成EDAS(替代Eureka)
https://help.aliyun.com/document_detail/72618.html?spm=5176.7946893.821398.spring-cloud.603123beXemW ...
- error loading midas.dll问题
如果用的delphi在你的单元里用uses midaslib这个东西就可以把midas静态连接到你的程序楼上的也可以 在程序中使用winexec("regsvr32.exe midas.dl ...
- 转帖: Serverless架构模式简介
Serverless架构模式简介 原贴地址:https://blog.csdn.net/chdhust/article/details/71250099?utm_medium=referral&a ...
- 关于windows内存的一些简单看法
1. 公司的产品有一个检查windows操作系统的功能,验证是否满足 只能客户端 的运行需求: 这里面的可用虚拟内存是128T 感觉非常奇怪了. 然后自己想了下128T 是 2的 47次方 猜想是不是 ...