acdream1198 求很多人从某点出发,汇聚于某点,至少遍历所有点一次的最短时间
来源:互联网 发布:注册码破解软件 编辑:程序博客网 时间:2024/04/30 18:48
题目描述如题。
思路:从某点可以无限次出发,很像流的问题,开始时候用流,不行。
如此抽象出来问题(问题抽象出来就简单了,关键是如何转化和抽象):这个最短时间,其实是所有点从起点出发,经过一条路径(至少吧),去汇集点的过程,那么最短的时间必然是最长的那条路径(时间最长),若无需攻占所有点,那么直接是最短里,所以要攻占所有点,必然是max(起点到i,i到终点)(遍历i)。
#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;const int inf=0x3f3f3f3f;const int maxn=1001, maxe=200010;int head[maxn]; int nume=0;int e[maxe][3];void inline adde(int i,int j,int w){ e[nume][0]=j;e[nume][1]=head[i];head[i]=nume; e[nume++][2]=w; e[nume][0]=i;e[nume][1]=head[j];head[j]=nume; e[nume++][2]=w;}int ds[maxn];int dt[maxn]; int n,m;void spfa(int s,int d[]){ int inq[maxn]; memset(inq,0,sizeof(inq)); d[s]=0; queue<int>q; q.push(s); while(!q.empty()) { int cur=q.front(); q.pop(); inq[cur]=0; for(int j=head[cur];j!=-1;j=e[j][1]) { int v=e[j][0]; if(d[v]>d[cur]+e[j][2]) { d[v]=d[cur]+e[j][2]; if(!inq[v]) { inq[v]=1; q.push(v); } } } }}int solve(){ int minmax=0; for(int i=0;i<n;i++) { if(ds[i]+dt[i]>minmax) minmax=ds[i]+dt[i]; } return minmax;}void init(){ nume=0; for(int i=0;i<n;i++) { head[i]=-1; ds[i]=inf; dt[i]=inf; }}int main(){ int T; scanf("%d",&T);int ct=1; while(T--) { scanf("%d%d",&n,&m); init(); int aa,bb,cc; for(int i=0;i<m;i++) { scanf("%d%d%d",&aa,&bb,&cc); adde(aa,bb,cc); } int s,t; scanf("%d%d",&s,&t); spfa(s,ds); spfa(t,dt); int ans=solve(); printf("Case #%d: %d\n",ct++,ans); } return 0;}
0 0
- acdream1198 求很多人从某点出发,汇聚于某点,至少遍历所有点一次的最短时间
- (java)百度笔试之:求从某一点开始遍历所有点的最短距离
- hdu 4771 求一点遍历所有给定点的最短路(bfs+dfs)
- poj 1113 Wall 【求包围所有点、且与所有点距离至少为L的曲线的最小周长】
- hdu 1599 find the mincost route(无向图的最小环:求从一个点遍历所有节点以后回到原点的最短路径)
- hdu 5001 从任意点出发任意走d步不经过某点概率
- [Google] 平面上有很多点( x,y均为整数) ,求一个点 ,使该点到 所有点的 曼哈顿距离和 最小
- (hdu step 6.2.1)最短路(求从a点到b点的最短距离)
- dijkstra(n^2)求某个点到所有点的最短路径
- 包含点集所有点的最小圆的算法
- HDU 5001 Walk 求从任意点出发任意走不经过某个点的概率 概率dp 2014 ACM/ICPC Asia Regional Anshan Online
- 前端问题汇聚点,所有疑问欢迎在这里留言
- 平面n个点 求从最左边点到最右边点再返回的最短路长 uva 1347
- HDU1007 求最短距离的点对
- POJ 3160 求有向图(点权)遍历的最大权值 强连通缩点+最长路
- POJ 1125 可不可能遍历所有点情况下的最短路径
- Floyd算法求所有点对之间的最短路径
- 周鸿祎谈产品设计 要从这3点出发
- pygame 初记
- error cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>
- shell之文本过滤(awk)
- 反渗透设备:瓶装纯净水设备的特点及适用范围介绍
- Hadoop集群管理
- acdream1198 求很多人从某点出发,汇聚于某点,至少遍历所有点一次的最短时间
- 日语中特殊符号输入
- flex 4.6 按钮(button)和按钮皮肤(buttonSkin)类的实现
- IRIX系统简单维护
- VC获取时间
- Linux 性能监控、测试、优化工具
- 推荐:互联网时代
- c++ primer 第五版学习笔记-第二章-typedef不等于#define
- 动态添加和删除crontab