[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() {;}
代码

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 民儿玉米地妈全给你 民儿和娘玉米地的小说 第章母亲播种危险期怀孕 儿子今晚后妈随便你怎么弄说说 同学说要看我骑他妈我说可以 荒村野性全文阅读目录 小成和后妈全文免费阅读文章 小诚和后妈全文免费阅读 娘亲在玉米地河边 我和娘亲玉米 娘亲给儿生个娃大结局 在玉米地插娘亲短文 在玉米地插娘亲电影 王来地里与娘激战2 在玉米地插娘亲播放 孩子别谢了我是你妈 臭小子 别急妈咪又不是不给你 粉嫩娘亲全文阅读全文 你的好粗妈v好痛 乡村孽缘上了王雪琴101一0 乡村小神医之情缠玉米地 乡村孽缘长篇小说全文免费阅读 乡村孽缘王雪琴怀孕是第几章 桃花村傻牛李大根 拨出来你爸要来 一个山村全家小说全集 乡村孽缘胡秀`小说全集 儿子小点声别让你爸听见长篇小说 胡秀英全文费阅读全文 儿子小声点别让你爸听见小说 乡村浪子的孽缘大伯母 畜牲别让你爸听见在线小说阅读 胡秀英乡全文免费阅读 婶的肥田全文免费阅读 乡村孽缘 王雪琴 熟花母芬芳泌蜜全文阅读 中文字字幕23页在线 单身娘亲有肥田 中文字字幕125页 中文字幕天堂网 中文字126幕中文字页幕