codeforces 230D Planets 最短路
2014-04-08 19:03
316 查看
Planets
挺简单的一道题,但是我一直T在66组,然后看了下别人的题解,是我在查找的方式不对,然后学了set顿时简单了。。
挺简单的一道题,但是我一直T在66组,然后看了下别人的题解,是我在查找的方式不对,然后学了set顿时简单了。。
#include <cstdlib> #include <cctype> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <string> #include <iostream> #include <sstream> #include <map> #include <set> #include <queue> #include <stack> #include <fstream> #include <numeric> #include <iomanip> #include <bitset> #include <list> #include <stdexcept> #include <functional> #include <utility> #include <ctime> using namespace std; #define PB push_back #define MP make_pair #define REP(i,n) for(int i=0;i<(n);++i) #define FOR(i,l,h) for(int i=(l);i<=(h);++i) #define DWN(i,h,l) for(int i=(h);i>=(l);--i) #define CLR(vis) memset(vis,0,sizeof(vis)) #define MST(vis,pos) memset(vis,pos,sizeof(vis)) #define MAX3(a,b,c) max(a,max(b,c)) #define MAX4(a,b,c,d) max(max(a,b),max(c,d)) #define MIN3(a,b,c) min(a,min(b,c)) #define MIN4(a,b,c,d) min(min(a,b),min(c,d)) #define PI acos(-1.0) #define INF 1000000000 #define LINF 1000000000000000000LL #define eps 1e-8 typedef long long LL; const int maxn=1e6+6; int n,m; set<int> p[maxn]; struct node{ int w,to,next; }a[maxn]; int dis[maxn],head[maxn],vis[maxn]; int edge; void init() { MST(head,-1); edge=0; } void addedge(int u,int v,int d) { a[edge].to=v; a[edge].w=d; a[edge].next=head[u]; head[u]=edge++; } int get(int num,int id) { while(p[id].find(num)!=p[id].end()) num++; return num; } queue<int>q; bool spfa(int s) { int v,i; while(!q.empty()) q.pop(); MST(dis,0x3f); dis[s]=0; memset(vis,0,sizeof(vis)); q.push(s); vis[1]=1; while(!q.empty()) { int tmp=q.front(); q.pop(); vis[tmp]=0; int pos=get(dis[tmp],tmp); for(i=head[tmp];~i;i=a[i].next) { v=a[i].to; if(pos+a[i].w<dis[v]) { dis[v]=pos+a[i].w; if(!vis[v]) { vis[v]=1; q.push(v); } } } } return true; } int main() { int a,b,c,k; init(); cin>>n>>m; REP(i,m) { scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); addedge(b,a,c); } FOR(i,1,n) { scanf("%d",&k); while(k--) { scanf("%d",&a); p[i].insert(a); } } spfa(1); if(dis ==0x3f3f3f3f) cout<<"-1\n"; else cout<<dis <<endl; return 0; }
相关文章推荐
- Codeforces 667D World Tour 最短路
- codeforces 287DIV2 E - Breaking Good(最短路)
- Codeforces 601A The Two Routes【最短路】
- codeforces 544 D Destroying Roads 【最短路】
- 【Codeforces】449B Jzzhu and Cities 最短路
- Codeforces 144D. Missile Silos 最短路
- codeforces 667D D. World Tour(最短路)
- CodeForces 173B Chamber of Secrets 二分图+最短路
- Codeforces 144D Missile Silos(SPFA最短路)
- 【最短路】 codeforces 449B Jzzhu and Cities
- Codeforces 144D. Missile Silos 最短路
- codeforces 954 D. Fight Against Traffic【BFS + 最短路】
- Codeforces 575G Run for beer 最短路
- Codeforces - 715B. Complete The Graph - 构造最短路
- Codeforces 450D - Jzzhu and Cities(最短路)
- Codeforces-721C:Journey(最短路上的DP)
- CodeForces 507E Breaking Good 最短路
- CodeForces - 449B Jzzhu and Cities 最短路
- 【打CF,学算法——三星级】CodeForces 689B Mike and Shortcuts (最短路+spfa)
- Codeforces 544D Destroying Roads【思维枚举+最短路】好题~好题!