2019.2.15 t2

考虑倒过来计算最短路径长度,设dis[u]表示在最坏情况下,点u到最近的一 个出口的最短路,则p个出口的dis值都是0,答案即为dis[0]。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <cctype>
 6 #include <queue>
 7 #include <algorithm>
 8 using namespace std;
 9
10 #define res register int
11 #define LL long long
12 #define inf 0x3f3f3f3f
13 inline int read()
14 {
15     int x(0),f(1); char ch;
16     while(!isdigit(ch=getchar())) if(ch==‘-‘) f=-1;
17     while(isdigit(ch)) x=x*10+ch-‘0‘,ch=getchar();
18     return f*x;
19 }
20
21 inline int max(int x,int y){return x>y?x:y;}
22 inline int min(int x,int y){return x<y?x:y;}
23 const int N=1000000+10;
24 int n,m,k,d,tot;
25 int head[N],ver[N<<1],nxt[N<<1],edge[N<<1];
26 int dis[N],vis[N];
27 inline void add(int x,int y,int z){
28     ver[++tot]=y; nxt[tot]=head[x]; head[x]=tot; edge[tot]=z;
29 }
30 struct node{
31     int id;
32     LL dd;
33     bool operator<(const node &n2) const {
34     return dd>n2.dd;}
35 };
36 priority_queue<node> q;
37
38 inline LL dij()
39 {
40     while(q.size())
41     {
42         node now=q.top(); q.pop();
43         int x=now.id,z=now.dd;
44         if(++vis[x]>d+1) continue;
45         if(vis[x]==d+1 || !dis[x])
46         {
47             dis[x]=z;
48             for(res i(head[x]) ; i ; i=nxt[i])
49             {
50                 int y=ver[i];
51                 if(dis[y]==inf)
52                     q.push((node){ver[i],dis[x]+(LL)edge[i]});
53             }
54         }
55     }
56 }
57
58 int main()
59 {
60     freopen("maze.in","r",stdin);
61     freopen("maze.out","w",stdout);
62
63     memset(dis,inf,sizeof(dis));
64     n=read(); m=read(); k=read(); d=read();
65     for(res i=1 ; i<=m ; i++)
66     {
67         int x=read(),y=read(),z=read();
68         add(x,y,z); add(y,x,z);
69     }
70     for(res i=1 ; i<=k ; i++)
71     {
72         int x=read(); dis[x]=0;
73         q.push((node){x,0});
74     }
75     dij();
76     if(dis[0]==inf) puts("-1");
77     else cout<<dis[0]<<endl;
78
79     return 0;
80 }

原文地址:https://www.cnblogs.com/wmq12138/p/10385907.html

时间: 2024-08-30 14:22:05

2019.2.15 t2的相关文章

【谜客帝国】第145届芭比娃娃主擂谜会(2019.01.15)

[谜客帝国]第145届芭比娃娃主擂谜会(2019.01.15) 主持:瓷   计分:默沫 1. 同心十八载,白首居河东(2字2019亚洲杯中国球员)石柯 2. 王朗气极坠地死(3字方位字)骂下马 [注:典据<三国演义>93回,“王朗听罢,气满胸膛,大叫一声,撞死于马下.”] 3. 城头长弓搭白羽(2字宋词人)张翥 4. 重门折屐未曾进(成语)格格不入 [注:重门.折屐,皆为谜格.] 5.“石城古岸头”(2字国家森林公园)圭山 6. 凯撒大帝显露出愤怒(4字<诗经>名句)七月流火 [

【谜客帝国】第148届梦中人主擂谜会(2019.03.15)

[谜客帝国]第148届梦中人主擂谜会(2019.03.15) 主持:瓷    计分:小白 1.夫人囚禁于何处(5字对景点位置咨询语)娘子关在哪 2.找你去战胜排名第二的人(外教练)索尔斯克亚 3.二月里来换新装(莫言小说<蛙>人物)王胆 4.一心除皇上,自然搭上命(科技名词)全息 5.布什更二(货币冠量)一便士 6.“身形婀娜,虽裹在一袭宽大缁衣之中,仍掩不住窈窕娉婷之态”(3字古埃及国王,卷帘格)美尼斯 [注:面为<笑傲江湖>中对仪琳的描写,美尼斯为是埃及第一王朝的开国国王] 7

【谜客帝国】第150届微雨潇潇联想&amp;灯谜谜会(2019.04.15)

[谜客帝国]第150届微雨潇潇联想&灯谜谜会(2019.04.15) 主持:瓷    计分:晶莹 1.山寺桃花始盛开 才了蚕桑才插田 爱与温暖之佳作 布谷声中夏令新 5 人间四月天 2.幽居在深谷 谢娘之风致 貌略逊黛玉 月夜遇梅仙 4 林下美人 3.有三秋桂子 育桃李满园 效我军劲旅 学仲淹咏梅 4 华中师范 [注:华中师范大学校址桂子山] 4.刮目相看吕蒙 回书效仿刘彻 莽夫手不释卷 落架东湖之滨 4 武汉大学 [注:珞珈山原名落架山] 5.有鲈鱼堪脍 一字救千人 巨鸟之羽翼 宋玉之词赋 1

【谜客帝国】第147届月思主擂谜会(2019.02.15)

 [谜客帝国]第147届月思主擂谜会(2019.02.15) 主持计分:东东 1.“人在中天日月间”(9笔字)春/月思 [注:面出陈孚<开平即事二首>,“势超大地山河上,-.”] 2. 玉漏声中烟气袅(3字法国奢侈品牌)YSL/月思 3. 双双相念初相爱(2字著名动漫人物)菜菜/月思 4.“数点燕云州外.雪霜威”(足球用语二,4+3)4132.451/月思 [注:面出余文<相见欢>,“登高望断龙旗,未曾归.几度中原北定,梦依稀.朔风乱,胡尘漫,掩斜晖.-.”] 5.“十载同心如一人

PAT 甲级 A1012 (2019/02/15)

1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 struct Stu_info{ 6 int id; //存放 id 的六位整数 7 int score[4]; //存放 C M E A 的(分数)数组 8 }stu[2010]; 9 char course[4] = {'A', 'C', 'M', 'E'}; //将平均分A存在course[0

PAT 甲级 A1062 (2019/02/15)

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> // STL 使用相关的函数需要include进来 4 using namespace std; 5 struct Stu_info{ 6 char id[10]; 7 int de, cai, sum; 8 int flag; 9 }stu[100010]; 10 //此函数返回值为bool型,相应的返回 true 或者 false 11 bool

【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能经过排插数量最大的那些充电器. 所以,我们只要模拟插排插的过程,记录当前深度\(d\).插座数\(t\)即可. 设选择的能经过排插数量恰好为\(d\)的充电器有\(x\)个,则若\(t<x\),显然不合法. 否则,我们将\(x\)个位置插上充电器,其余位置尽可能地插排插,就可以了. 代码 #incl

2019.2.21 T2题解

meet 大概思路就是 , 找出相交的路径 , 判断方向 , 分类讨论.. 假设已经找出了相交路径 ... 若方向相同 , 则找到相交路径上边权的最大值 , 若最大值>出发时间差 , 则可行. 原因: 由于方向相同所以在相交路径上这两个点的相对距离是不变的,看最大的边权即可. 这个东西用st表就可以搞定 若方向不同,就看看他们相遇的位置是不是相交路径上各个(不一定是最两头的点)边的端点之一. 因为题中说在边上才算 , 点不能算到边上. 所以不在点上就一定会在边上相遇. 然后就是怎么找相交路径了.

2019/1/15 批量删除数据库相关数据

目的:删除数据库各个系统his库里的测试soe与故障数据:一.sql执行错误:执行sql:SELECT FROM SOE WHERE sDevCode = 012400000001报错:[SQL Server]将 varchar 转换为数据类型 numeric 时出现算术溢出错误.原因:查看表设计,sDevCode列的类型为varchar(字符串),修改:SELECT FROM SOE WHERE sDevCode = '012400000001' .二.脚本: -- coding:UTF-8