Codeforces Beta Round #77 (Div. 1 Only), problem: (C) Volleyball dijstra+heap
来源:互联网 发布:淘宝图片水印在线制作 编辑:程序博客网 时间:2024/06/04 18:59
做法:一开始WA,因为没想到dijstra的复杂度可以降到nlogn,紧接着用了floyed,就是TLE不断了。发现这个真是神算法。
首先用dijstra求出每个点之间的最短路,然后重新构图,再一次dijstra即可
#include<queue>#include<cstdio>#include<vector>#include<cstring>#include<algorithm>#define eps 1e15#define LL long longusing 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 #77 (Div. 1 Only), problem: (C) Volleyball dijstra+heap
- Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
- Codeforces Beta Round #69 (Div. 1 Only), problem: (C) Beavermuncher-0xFF 树形DP+优先队列
- Codeforces Beta Round #85 (Div. 1 Only), problem: (C) Petya and Spiders 状态压缩
- Codeforces Beta Round #77 (Div. 1 Only), problem: (B) Lucky Numbers 数位DP+剪枝DFS+贪心
- Codeforces Beta Round #83 (Div. 1 Only)
- Codeforces Beta Round #25 (Div. 2 Only), problem: (C) Roads in Berland 图论
- Codeforces Beta Round #22 (Div. 2 Only), problem: (C) System Administrator 图论+组合数
- Codeforces Beta Round #79 (Div. 1 Only), problem: (B) Buses 路径DP
- Codeforces Beta Round #16 (Div. 2 Only)——C
- Codeforces Beta Round #18 (Div. 2 Only)——C
- Codeforces Beta Round #74 (Div. 2 Only)——C
- Codeforces Beta Round #87 (Div. 2 Only) C. Party
- Codeforces Beta Round #4 (Div. 2 Only) C. Registration system
- C.Stripe(Codeforces Beta Round #18 (Div. 2 Only))
- Codeforces Beta Round #91 (Div. 2 Only) C. Lucky Sum
- Codeforces Beta Round #22 (Div. 2 Only)-C. System Administrator
- Codeforces Beta Round #9 (Div. 2 Only): C
- curruncy develop base
- PandaBoard烧写指南
- 机试教程1 排序
- 误删数据恢复
- (精华)Ring3与Ring0通信方法若干
- Codeforces Beta Round #77 (Div. 1 Only), problem: (C) Volleyball dijstra+heap
- Android 蓝牙( Bluetooth)耳机连接分析及实现
- python读文件时UnicodeDecodeError的处理
- 应用程序与驱动通信的若干方式
- Java之美[从菜鸟到高手演练]之Linux篇——Linux下JDK、Ruby、Node.js等runtime的安装
- Django 错误集合
- 中缀表达式转后缀表达式
- 分页存储过程
- Fatal signal 11 (SIGSEGV)的问题