POJ 1511 Invitation Cards(spfa最短路)
2015-02-05 14:30
363 查看
大概题意:有n个点需要志愿者去发传单,然后有m条公交车路线..单向的,早上这些志愿去除了大本营1之外的所有点发传单,然后晚上再回来...问全部志愿者一来一回的最短路程是多少...(大概一个点只有一个志愿者吧...)
类似于POJ 3268 那个牛聚会的那个题目...从1点出发在回来1点...那么1点出发到各点的最短路可以spfa一下...然后从各点回到1点可以反向建边,然后以1为起点spfa计算一下单源最短路径就好了...两个加起来的和就是答案了
第一次用邻接表...找了学长的邻接表模板...貌似和我百度的不一样..用着还顺手...
类似于POJ 3268 那个牛聚会的那个题目...从1点出发在回来1点...那么1点出发到各点的最短路可以spfa一下...然后从各点回到1点可以反向建边,然后以1为起点spfa计算一下单源最短路径就好了...两个加起来的和就是答案了
第一次用邻接表...找了学长的邻接表模板...貌似和我百度的不一样..用着还顺手...
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<queue> #include<algorithm> #include<iostream> using namespace std; #define M 1000009 #define inf 0x7fffffff struct node { int u,v,w,next; }edge1[M+M],edge2[M+M]; int head1[M],head2[M]; int n,m,t1,t2,used[M],dis[M]; void inti() { t1=t2=0; memset(head1,-1,sizeof(head1)); memset(head2,-1,sizeof(head2)); } void add(int u,int v,int w) { edge1[t1].v=v; edge1[t1].w=w; edge1[t1].next=head1[u]; head1[u]=t1++; edge2[t2].v=u; edge2[t2].w=w; edge2[t2].next=head2[v]; head2[v]=t2++; } long long spfa(node edge[],int head[]) { for(int i=1;i<=n;i++) dis[i]=inf; queue<int> q; memset(used,0,sizeof(used)); q.push(1); dis[1]=0; used[1]=1; while(!q.empty()) { int u=q.front(); q.pop(); used[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(dis[v]>edge[i].w+dis[u]) { dis[v]=edge[i].w+dis[u]; if(used[v]==0) { used[v]=1; q.push(v); } } } } long long ans=0; for(int i=1;i<=n;i++) ans+=dis[i]; return ans; } int main() { int T; cin>>T; while(T--) { int u,v,w; scanf("%d %d",&n,&m); inti(); for(int i=0;i<m;i++) { scanf("%d %d %d",&u,&v,&w); add(u,v,w); } long long ans; ans=spfa(edge1,head1)+spfa(edge2,head2); cout<<ans<<endl; } return 0; }
相关文章推荐
- (POJ 1511)Invitation Cards 有向图来回最短路 + SPFA (复习必看题)
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- Invitation Cards POJ - 1511 最短路spfa
- POJ-1511(SPFA找最短路(正向和反向))
- POJ 1511 最短路spfa
- POJ 1511 Invitation Cards【来回最短路+SPFA】
- poj 1511 Invitation Cards(spfa最短路)
- poj 1511 Invitation Cards 最短路SPFA(模板题)
- POJ - 1511 Invitation Cards (SPFA最短路)
- POJ 1511 双向单源最短路 SPFA+邻接表
- POJ 1511(邻接表和最短路 SPFA)
- POJ 1511 Invitation Cards 求来回最短路(spfa)
- POJ-1511 Invitation Cards( 最短路,spfa )
- POJ1511 SPFA模版 用边存的最短路
- Invitation Cards+POJ+有一道比较裸的最短路+spfa
- poj 1511 Invitation Cards(spfa)
- POJ - 2253(变相最短路,SPFA)
- poj 3328(spfa)多终点多起点的最短路
- POJ 2253 - 最短路变形 SPFA+Dijstra
- 最短路spfaPOJInvitation Cardsj解题报告