【最短路】poj1797 类SPFA
2015-07-14 13:58
309 查看
题意:翻译来自scy
Description
T组数据。每组数据有n个点m条双向边,问从1到n的路径上的最小的边最大是多少。
如数据1中路径1->2->3的最小边为3,1->3的最小边为4,取最大值为4
Input
第一行是数据组数T
第二行为n(1 <= n <= 1000)、m
接下来m行,每行是u,v,c,代表u、v之间有一条边权为c的双向边c<=1000000
Output
每个样例第一行输出"Scenario #i:",i为第几组数据。
接下来输出1到n的路径上的最小的边最大值
每组数据输出后输出一个空行
Sample Input
1
3 3
1 2 3
1 3 4
2 3 5
Sample Output
Scenario #1:
4
做法其实十分类似SPFA(简直一模一样),只是d数组定义改为出发点到点i的最小边的最大值。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
const int N=1100,INF=(int)1e6;
int n,m,len;
int first
,d
;
bool vis
;
struct node{
int x,y,d,next;
}a[N*N];
void ins(int x,int y,int t)
{
len++;
a[len].x=x;a[len].y=y;a[len].d=t;
a[len].next=first[x];first[x]=len;
}
int main()
{
int T,i,j;
scanf("%d",&T);
for(int TT=1;TT<=T;TT++)
{
printf("Scenario #%d:\n",TT);
scanf("%d%d",&n,&m);
len=0;
memset(first,0,sizeof(first));
for(i=1;i<=m;i++)
{
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
ins(x,y,t);
ins(y,x,t);
}
d[1]=INF;
for(i=2;i<=n;i++) d[i]=0;
memset(vis,0,sizeof(vis));
queue<int> q;
q.push(1);
while(!q.empty())
{
int x=q.front();q.pop();
vis[x]=1;
for(i=first[x];i;i=a[i].next)
{
int y=a[i].y;
if(min(d[x],a[i].d)>d[y])
{
d[y]=min(d[x],a[i].d);
if(!vis[y])
{
vis[y]=1;
q.push(y);
}
}
}
vis[x]=0;
}
printf("%d\n",d
);
printf("\n");
}
}
Description
T组数据。每组数据有n个点m条双向边,问从1到n的路径上的最小的边最大是多少。
如数据1中路径1->2->3的最小边为3,1->3的最小边为4,取最大值为4
Input
第一行是数据组数T
第二行为n(1 <= n <= 1000)、m
接下来m行,每行是u,v,c,代表u、v之间有一条边权为c的双向边c<=1000000
Output
每个样例第一行输出"Scenario #i:",i为第几组数据。
接下来输出1到n的路径上的最小的边最大值
每组数据输出后输出一个空行
Sample Input
1
3 3
1 2 3
1 3 4
2 3 5
Sample Output
Scenario #1:
4
做法其实十分类似SPFA(简直一模一样),只是d数组定义改为出发点到点i的最小边的最大值。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<iostream>
using namespace std;
const int N=1100,INF=(int)1e6;
int n,m,len;
int first
,d
;
bool vis
;
struct node{
int x,y,d,next;
}a[N*N];
void ins(int x,int y,int t)
{
len++;
a[len].x=x;a[len].y=y;a[len].d=t;
a[len].next=first[x];first[x]=len;
}
int main()
{
int T,i,j;
scanf("%d",&T);
for(int TT=1;TT<=T;TT++)
{
printf("Scenario #%d:\n",TT);
scanf("%d%d",&n,&m);
len=0;
memset(first,0,sizeof(first));
for(i=1;i<=m;i++)
{
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
ins(x,y,t);
ins(y,x,t);
}
d[1]=INF;
for(i=2;i<=n;i++) d[i]=0;
memset(vis,0,sizeof(vis));
queue<int> q;
q.push(1);
while(!q.empty())
{
int x=q.front();q.pop();
vis[x]=1;
for(i=first[x];i;i=a[i].next)
{
int y=a[i].y;
if(min(d[x],a[i].d)>d[y])
{
d[y]=min(d[x],a[i].d);
if(!vis[y])
{
vis[y]=1;
q.push(y);
}
}
}
vis[x]=0;
}
printf("%d\n",d
);
printf("\n");
}
}
相关文章推荐
- 封装好的Folyd建图,C++源码
- 图论学习笔记之一——Floyd算法
- poj 3249 Test for Job 最长路
- HDU 2544
- Timus 1557 Network Attack DFS+各种各种...
- HDU1289 Tarjan-模板题
- Poj2638 网络流+最短路+二分答案
- Aizu1311 分层图最短路 (...大概)
- HDU 3631 Shortest Path
- 二分图匹配模板
- 单源最短路深度分析
- Six Degrees of Cowvin Bacon(最短路径floyd算法)
- Edmonds-Karp 最大流 hdu 1532 Drained Ditches
- dijkstra_最短路径_hdu_3790
- dfs_poj_2531
- hdu_1175
- poj_1135_最短路径&枚举
- 最小生成树_hdu_1863
- Dijkstra算法
- 图论算法 有图有代码 万字总结 向前辈致敬