Codeforces Beta Round #77 (Div. 1 Only), problem: (C) Volleyball dijstra+heap
2013-02-25 13:42
411 查看
做法:一开始WA,因为没想到dijstra的复杂度可以降到nlogn,紧接着用了floyed,就是TLE不断了。发现这个真是神算法。
首先用dijstra求出每个点之间的最短路,然后重新构图,再一次dijstra即可
首先用dijstra求出每个点之间的最短路,然后重新构图,再一次dijstra即可
#include<queue> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> #define eps 1e15 #define LL long long using namespace std; const int LMT=2004; struct line { int u,v,next,len; }e[2000000]; LL dis[LMT]; int next[LMT],all,n,m,s,vis[LMT]; LL c[LMT],timid[LMT]; void insert(int u,int v,int len) { e[all].u=u; e[all].v=v; e[all].len=len; e[all].next=next[u]; next[u]=all++; } struct cmp { bool operator()(const int a,const int b) { return dis[a]>dis[b]; } }; void dij(int s) { priority_queue<int,vector<int>,cmp>q; int u; for(int i=0;i<LMT;i++)dis[i]=eps; memset(vis,0,sizeof(vis)); dis[s]=0; q.push(s); while(!q.empty()) { u=q.top(); q.pop(); if(vis[u])continue; vis[u]=1; for(int x=next[u];x!=-1;x=e[x].next) if(0==vis[e[x].v]&&dis[e[x].v]>dis[e[x].u]+e[x].len) { dis[e[x].v]=dis[e[x].u]+e[x].len; q.push(e[x].v); } } } int main(void) { int u,v,len,x,y; memset(next,-1,sizeof(next)); scanf("%d%d%d%d",&n,&m,&x,&y); while(m--) { scanf("%d%d%d",&u,&v,&len); insert(u,v,len); insert(v,u,len); } for(int i=1;i<=n;i++)scanf("%I64d%I64d",&timid[i],&c[i]); for(int i=1;i<=n;i++) { dij(i); for(int j=1;j<=n;j++) if(dis[j]<=timid[i]) insert(i+n,j+n,c[i]); } dij(x+n); if(dis[y+n]==eps)printf("-1\n"); else printf("%I64d\n",dis[y+n]); return 0; }
相关文章推荐
- Codeforces Beta Round #85 (Div. 1 Only), problem: (C) Petya and Spiders 状态压缩
- Codeforces Beta Round #79 (Div. 1 Only), problem: (B) Buses 路径DP
- Codeforces Beta Round #9 (Div. 2 Only), problem: (D) How many trees? DP
- Codeforces Beta Round #69 (Div. 1 Only), problem: (C) Beavermuncher-0xFF 树形DP+优先队列
- Codeforces Beta Round #77 (Div. 1 Only), problem: (B) Lucky Numbers 数位DP+剪枝DFS+贪心
- Codeforces Beta Round #16 (Div. 2 Only), problem: (E) Fish 概率DP
- Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
- odeforces Beta Round #25 (Div. 2 Only), problem: (D) Roads not only in Berland 图论 DFS
- Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
- Codeforces Beta Round #25 (Div. 2 Only), problem: (C) Roads in Berland 图论
- Codeforces Beta Round #22 (Div. 2 Only), problem: (C) System Administrator 图论+组合数
- Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 题解
- Codeforces Beta Round #9 (Div. 2 Only)D
- Codeforces Beta Round #4 (Div. 2 Only) 最长上升子序列
- Codeforce#181 div2 C,E--problem 300E,300C
- Codeforces Round #296 (Div. 2) - D. Clique Problem(贪心)
- Codeforces Beta Round #22 (Div. 2 Only)-D. Segments
- Codeforces Round #371 (Div. 1) C. Sonya and Problem Wihtout a Legend(贪心+DP)
- android-problem——remount of /system failed: Read-only file system
- Codeforces Beta Round #83 (Div. 1 Only) E.Darts 凸多边形面积交