【spfa】 hdu 2680
2014-04-05 00:03
99 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2680
输入:n, m, s
代表n个点,m个边,s为终点。
输入m行, 单向边,u,v,w
再输入z
输入z个数,z个起点。
求最短路。
思路。
构造边的时候要反向构造,然后把s当做起点。。。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn= 1010;
const int maxm= 20020;
const int INF = 0x3f3f3f3f;
bool inqueue[maxn];
int dis[maxn];
int node[maxn];
int top;
struct Side
{
int to,next,w;
}side[maxm];
void add_side(int u,int v,int w)
{
side[top]=(Side){v,node[u],w};
node[u]=top++;
}
int n,m,s,z;
void spfa()
{
memset(dis,0x3f,sizeof(dis));
memset(inqueue,false,sizeof(inqueue));
dis[s]=0;
queue <int> q;
q.push(s);
while(!q.empty())
{
int u=q.front(); q.pop();
inqueue[u]=false;
for(int i=node[u];i!=-1;i=side[i].next)
{
int v=side[i].to;
if(dis[v]>dis[u]+side[i].w)
{
dis[v]=dis[u]+side[i].w;
if(!inqueue[v])
{
q.push(v);
inqueue[v]=true;
}
}
}
}
int ans=INF;
cin>>z;
for(int i=0;i<z;i++)
{
int temp;
scanf("%d",&temp);
ans=min(ans,dis[temp]);
}
if(ans==INF) ans=-1;
cout<<ans<<endl;
}
int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d%d%d",&n,&m,&s))
{
memset(node,-1,sizeof(node));
top=0;
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
//add_side(u,v,w);
add_side(v,u,w);
}
spfa();
}
return 0;
}
。
输入:n, m, s
代表n个点,m个边,s为终点。
输入m行, 单向边,u,v,w
再输入z
输入z个数,z个起点。
求最短路。
思路。
构造边的时候要反向构造,然后把s当做起点。。。#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn= 1010;
const int maxm= 20020;
const int INF = 0x3f3f3f3f;
bool inqueue[maxn];
int dis[maxn];
int node[maxn];
int top;
struct Side
{
int to,next,w;
}side[maxm];
void add_side(int u,int v,int w)
{
side[top]=(Side){v,node[u],w};
node[u]=top++;
}
int n,m,s,z;
void spfa()
{
memset(dis,0x3f,sizeof(dis));
memset(inqueue,false,sizeof(inqueue));
dis[s]=0;
queue <int> q;
q.push(s);
while(!q.empty())
{
int u=q.front(); q.pop();
inqueue[u]=false;
for(int i=node[u];i!=-1;i=side[i].next)
{
int v=side[i].to;
if(dis[v]>dis[u]+side[i].w)
{
dis[v]=dis[u]+side[i].w;
if(!inqueue[v])
{
q.push(v);
inqueue[v]=true;
}
}
}
}
int ans=INF;
cin>>z;
for(int i=0;i<z;i++)
{
int temp;
scanf("%d",&temp);
ans=min(ans,dis[temp]);
}
if(ans==INF) ans=-1;
cout<<ans<<endl;
}
int main()
{
//freopen("input.txt","r",stdin);
while(~scanf("%d%d%d",&n,&m,&s))
{
memset(node,-1,sizeof(node));
top=0;
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
//add_side(u,v,w);
add_side(v,u,w);
}
spfa();
}
return 0;
}
。
相关文章推荐
- HDU 2680(spfa)
- HDU-2680 Choose the best route(SPFA)
- HDU 2680:Choose the best route【Dijkstra & SPFA】
- hdu 2680 Choose the best route(spfa/dijkstra)
- HDU 2680 Choose the best route (SPFA 算法求最短路径o(ke))
- hdu 2680 最短路基础题 spfa实现 算法总结
- HDU 2680 Choose the best route 【最短路 反向建图 dijkstra & SPFA 】
- HDU 2680Choose the best route (SPFA)
- HDU 2680(SPFA)
- hdu 2680 Choose the best route(SPFA或者Dijkstra)
- hdu 2680 Choose the best route (最短路问题 dijkstra | spfa)
- HDU-2680-Choose the best route【spfa】
- HDU 2680 Choose the best route【多源最短路,Dijkstra+spfa】
- HDU 3416 Marriage Match IV(spfa+最大流)
- HDU 2680 Choose the best route【最短路】
- hdu 1874 畅通工程续(模板题 spfa floyd)
- HDU-2680choose the best route(万能起点)
- hdu2992 Hotel booking (floyd+spfa+map)
- hdu 2680 Choose the best route
- Hdu-2680 Choose the best route