[NOIP2010冲刺十三] 逃离遗迹
来源:互联网 发布:struct hlist node 编辑:程序博客网 时间:2024/04/27 20:57
[NOIP2010冲刺十三] 逃离遗迹代码
【题目描述】
根据外星人的回信,在遗迹分布着三样道具。当三样道具都拿走后,遗迹就很快自动毁灭,所以必须要在最短时间内离开。遗迹可以看作是由N个房间(编号1..N)和N-l条长度不等通道所组成,并且任意两个房间之间有且只有一条路可以相互到达。现在我们的队员已经在编号为A,B,C的房间内拿到道具,并且准备撤退。由于只有一架直升机,所以只能在一个房间上停留。现在请你决定将直升机停在哪一个房间之上,能够使三人到达该房间的距离之和最短。
【输入格式】
第1行:四个整数N、A、B、C。
第2..N行:每行三个整数u,v,w,表示存在连接房间u,v的通道,长度w。
【输出格式】
第1行:一个整数,表示汇合房间的编号。若存在多个解,输出字典序最小的。
第2行:一个整数,表示三人到该房间距离之和。
【样例输入】
5 3 1 43 5 54 3 94 1 71 2 1
【样例输出】
416
【提示】
对于50%的数据:1≤N≤1,000。
对于100%的数据:1≤N≤20,000。 1≤A,B,C,u,v<=N且A,B,C不相等;u,v不相等。 1≤w≤1,000。
三遍SPFA
0.000s
rank1毫无压力
1 #include <queue> 2 #include <cstdio> 3 #include <cctype> 4 5 const int MAXN=20010; 6 const int INF=0x3f3f3f3f; 7 8 int n,S1,S2,S3; 9 10 int dis[MAXN],dis2[MAXN],dis3[MAXN];11 12 bool vis[MAXN];13 14 struct node {15 int to;16 int val;17 int next;18 };19 node e[MAXN<<1];20 21 int head[MAXN],tot;22 23 inline void read(int&x) {24 int f=1;register char c=getchar();25 for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());26 for(;isdigit(c);x=x*10+c-48,c=getchar());27 x=x*f;28 }29 30 inline void add(int x,int y,int v) {31 e[++tot].to=y;32 e[tot].val=v;33 e[tot].next=head[x];34 head[x]=tot;35 }36 37 void SPFA(int s,int*a) {38 std::queue<int> Q;39 for(int i=1;i<=n;++i) vis[i]=false;40 Q.push(s);41 a[s]=0;42 while(!Q.empty()) {43 int u=Q.front();44 Q.pop();45 for(int i=head[u];i;i=e[i].next) {46 int v=e[i].to;47 if(a[v]>a[u]+e[i].val) {48 a[v]=a[u]+e[i].val;49 if(!vis[v]) Q.push(v),vis[v]=true;50 }51 }52 }53 return;54 }55 56 int hh() {57 freopen("escapeb.in","r",stdin);58 freopen("escapeb.out","w",stdout);59 int x,y,z;60 read(n);read(S1);read(S2);read(S3);61 for(int i=1;i<n;++i) {62 read(x);read(y);read(z);63 add(x,y,z);add(y,x,z);64 }65 for(int i=1;i<=n;++i) dis[i]=dis2[i]=dis3[i]=INF;66 SPFA(S1,dis);SPFA(S2,dis2);SPFA(S3,dis3);67 int ans=INF,pos;68 for(int i=1;i<=n;++i) 69 if(ans>dis[i]+dis2[i]+dis3[i]) pos=i,ans=dis[i]+dis2[i]+dis3[i];70 printf("%d\n%d\n",pos,ans);71 return 0;72 }73 74 int sb=hh();75 int main() {;}
阅读全文
0 0
- [NOIP2010冲刺十三] 逃离遗迹
- [NOIP2010冲刺十二] 奶牛排队
- 【最短路】逃离遗迹 escape.pas/c/cpp
- 线段树 1212. [NOIP2010冲刺十二] 奶牛排队
- 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木
- 【NOIP2010冲刺十二模拟赛】奶牛晒衣服
- NOIp2010
- NOIP2010
- 堆栈—冲刺十三模拟赛 外星密码
- 遗迹系列
- 逃离
- 逃离
- 逃离
- “甬往直前,冲刺十三五”首站聚焦梅山新区规划建设
- 遗迹之门
- 寻找南京历史遗迹
- 同一个世界 四维离殇 遗迹 攻略
- NOIP2010 机器翻译
- P1807 最长路_NOI导刊2010提高(07)--最长路
- [HAOI2006]受欢迎的牛
- [SDOI2010]所驼门王的宝藏 --tarjan缩点+最长路
- [USACO06JAN]牛的舞会The Cow Prom
- P3038 [USACO11DEC]牧草种植Grass Planting
- [NOIP2010冲刺十三] 逃离遗迹
- COGS 244. [POI2000] 滑雪队
- P1199 三国游戏
- P1043 数字游戏
- COGS 775. 山海经 【线段树】
- COGS [USACO Mar07] 奶牛交通
- 【Discuz】dz3.2论坛搬家心得
- 洛谷 P2089 烤鸡
- NOIP2008 双栈排序