【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)

题干:

A country called Berland consists of n cities, numbered with integer numbers from 1to n. Some of them are connected by bidirectional roads. Each road has some length. There is a path from each city to any other one by these roads. According to some Super Duper Documents, Berland is protected by the Super Duper Missiles. The exact position of the Super Duper Secret Missile Silos is kept secret but Bob managed to get hold of the information. That information says that all silos are located exactly at a distance l from the capital. The capital is located in the city with number s.

The documents give the formal definition: the Super Duper Secret Missile Silo is located at some place (which is either city or a point on a road) if and only if the shortest distance from this place to the capital along the roads of the country equals exactly l.

Bob wants to know how many missile silos are located in Berland to sell the information then to enemy spies. Help Bob.

Input

The first line contains three integers nm and s (2 ≤ n ≤ 105, , 1 ≤ s ≤ n) — the number of cities, the number of roads in the country and the number of the capital, correspondingly. Capital is the city no. s.

Then m lines contain the descriptions of roads. Each of them is described by three integers viuiwi (1 ≤ vi, ui ≤ nvi ≠ ui, 1 ≤ wi ≤ 1000), where viui are numbers of the cities connected by this road and wi is its length. The last input line contains integer l (0 ≤ l ≤ 109) — the distance from the capital to the missile silos. It is guaranteed that:

  • between any two cities no more than one road exists;
  • each road connects two different cities;
  • from each city there is at least one way to any other city by the roads.

Output

Print the single number — the number of Super Duper Secret Missile Silos that are located in Berland.

Examples

Input

4 6 1
1 2 1
1 3 3
2 3 1
2 4 1
3 4 1
1 4 2
2

Output

3

Input

5 6 3
3 1 1
3 2 1
3 4 1
3 5 1
1 2 6
4 5 8
4

Output

3

Note

In the first sample the silos are located in cities 3 and 4 and on road (1, 3) at a distance 2 from city 1 (correspondingly, at a distance 1 from city 3).

In the second sample one missile silo is located right in the middle of the road (1, 2). Two more silos are on the road (4, 5) at a distance 3 from city 4 in the direction to city 5 and at a distance 3 from city 5 to city 4.

题目大意:

     图中有n个点,m条无向边,一个起点,问有距离原点最短距离为l的地方有几个(在边上或者在点上都算)。

解题报告:

   这题思路还是很清晰的啊,但是1WA了因为开数组应该是2e5,因为是无向图啊!!我记得之前就在这错过。

  首先把在点上的处理了,然后枚举每一条边分四种情况分别列出来,其中最后一种再分三种情况列出来就好了:

1.先可以设定的点在u,v中间,

2.可以设定的点更加靠近u,这样只需要满足求出的那个点,经过v再到原点的距离>L 就可以ans++了;

3.可以设定的点更加靠近v,这样只需要满足求出的那个点,经过u到原点的距离>L就可以ans++了。

对应将三种情况分别枚举出来,维护ans即可。(2和3比较难绕,但是可以从答案贡献的角度反面考虑,就不难证明正确性。)

AC代码:

#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX = 2e5 +5;
const int INF = 0x3f3f3f3f;
int n,m,s;
int id,ans;
int head[MAX];
int dis[MAX];
bool vis[MAX];
struct Node {int fm,to,w;int ne;
} e[MAX];
struct Point {int pos;int c;Point(){}Point(int pos,int c):pos(pos),c(c){}bool operator <(const Point & b) const {return c > b.c;}
};
void add(int u,int v,int w) {e[++id].fm=u;e[id].to = v;e[id].w = w;e[id].ne = head[u];head[u] = id;
}
void Dijkstra(int u) {memset(dis,INF,sizeof dis);dis[u] = 0;memset(vis,0,sizeof vis);priority_queue<Point> pq;pq.push(Point(u,0));while(!pq.empty()) {Point cur = pq.top();pq.pop();if(vis[cur.pos] == 1) continue;vis[cur.pos] = 1;for(int i = head[cur.pos]; i!=-1; i=e[i].ne) {if(vis[e[i].to]) continue;if(dis[e[i].to] > dis[cur.pos] + e[i].w) {dis[e[i].to] = dis[cur.pos] + e[i].w;pq.push(Point(e[i].to,dis[e[i].to]));}}}
}
int main()
{cin>>n>>m>>s;memset(head,-1,sizeof head);ans = 0;int a,b,w,L;for(int i = 1; i<=m; i++) {scanf("%d%d%d",&a,&b,&w);add(a,b,w);add(b,a,w);}cin>>L;Dijkstra(s);for(int i = 1; i<=n; i++) {if(dis[i] == L) ans++;}//枚举每一条边 for(int i = 1; i<=id; i+=2) {int u = e[i].fm,v = e[i].to,w = e[i].w;if(dis[u] >= L && dis[v] >= L) continue;if(dis[u] >= L && dis[v] <  L) {if(dis[v] + w > L) ans++; }else if(dis[v] >=L && dis[u] < L) {if(dis[u] + w > L) ans++;}else {int disu = L - dis[u],disv = L - dis[v];//计算一下多出来的那一块if(disu + disv == w) ans++;else {if(disu < w && dis[v] + (w-disu) > L) ans++;//别忘了disu < wif(disv < w && dis[u] + (w-disv) > L) ans++; }}}printf("%d\n",ans);return 0 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【牛客 - 210A】游戏(思维,脑洞)

题干&#xff1a; BLUESKY007,fengxunling和dreagonm三个人发现了一个像素游戏,这款神奇的游戏每次会生成一个nxm的网格,其中每一个格子都被随机染色为R,G,B三种颜色之一,每次都可以选择任意一个非B颜色的格子进行一次操作,每次操作都会满足以下规则&#xff1a; 1.操作的范围为…

建房子 最安全图纸_妄想山海初期该怎么办?砍树狩猎建房子,还能拆别人的房子...

妄想山海还是一个很有趣的游戏&#xff0c;唯一的缺点就是游戏对手机配置要求比较高&#xff0c;手机太差的玩家&#xff0c;就别想那么多了&#xff0c;希望等游戏正式上线&#xff0c;能优化的好一些吧&#xff01;在测试中&#xff0c;玩家能体验到游戏中的各种玩法&#xf…

【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )

题干&#xff1a; Rain has pummeled the cows field, a rectangular grid of R rows and C columns (1 < R < 50, 1 < C < 50). While good for the grass, the rain makes some patches of bare earth quite muddy. The cows, being meticulous grazers, dont w…

javaweb在线问卷系统_2020 最新流行的Java Web报表工具比对

随着信息系统的高速发展&#xff0c;报表平台逐渐成为了信息系统当中最为核心和重要的功能模块。报表工具有助于将原始数据可视化显示&#xff0c;使决策者或者相关人员能够一览整体的数据趋势&#xff0c;完整的报表解决方案会提供多样的表格数据展示、数据可视化元素&#xf…

隧道凿岩机器人_隧道凿岩机器人的研制

隧道凿岩机器人的研制隧道、洞室开挖是现代交通、能源、采掘、建筑等大规模基本建设中的一项难度大、耗资耗时多、劳动条件差但又十分重要、十分关键的施工作业。早期的液压凿岩设备全都是由人工操作的液压凿岩钻车&#xff0c;其施工效率和施工精度完全取决于操作人员的熟练程…

【HDU - 1045】Fire Net (dfs 或二分图)

题干&#xff1a; Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle that has four openings through which to …

html 按钮 按下 状态_第一次按下是启动,第二次按下是停止,俵哥分享2种接线方法...

朋友们大家好我是大俵哥&#xff0c;今天我们来说一下单按钮启停电路。这个电路虽然应用的不多&#xff0c;但是非常的经典&#xff0c;新手朋友们可以拿来练手。今天我们讲2种控制方法&#xff0c;一种用中间继电器控制一种用时间继电器控制&#xff0c;在看电路之前&#xff…

【CodeForces - 633D】Fibonacci-ish (离散化,暴力枚举+STPmap,fib数列收敛性质)

题干&#xff1a; Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if the sequence consists of at least two elementsf0 and f1 are arbitraryfn  2  fn  1  fn for all n ≥ 0. You …

sql server 迁移 mysql_【转】sql server迁移到mysql

【1】MSSQL2SQLSQL Server转换为MySQL工具&#xff0c;用了一下 感觉蛮不错的。分享上来&#xff0c;同时也以便记录下来以后自用。工具名称&#xff1a;Mss2sql来个操作流程:下载后打开压缩包运行mss2sql默认就是Move to MysQL server directly,选择下一步继续下一步,稍等片刻…

【51Nod - 1416】两点 (dfs 或 并查集+dfs)

题干&#xff1a; 福克斯在玩一款手机解迷游戏&#xff0c;这个游戏叫做”两点”。基础级别的时候是在一个nm单元上玩的。像这样&#xff1a; 每一个单元有包含一个有色点。我们将用不同的大写字母来表示不同的颜色。 这个游戏的关键是要找出一个包含同一颜色的环。看上图中4…

linux 源码安装mysql5.7_linux安装mysql5.7.27

一、卸载mysql安装有三种方式&#xff0c;包括二进制包安装(Using Generic Binaries)、RPM包安装、源码安装。一般是前两种比较多二、安装建议路径设置按照写的来将下载的压缩包复制到linux服务器/usr/local/路径下(下载地址https://dev.mysql.com/downloads/mysql/,进去下载默…

c语言可以将负数强制转换成正数吗_C语言笔记(一、概述)

1&#xff0e; C语言的特点 ①语言简洁、紧凑&#xff0c;使用方便、灵活。共有&#xff13;&#xff12;个关键字(也称保留字)&#xff0c;&#xff19;种控制语句。 ②运算符丰富&#xff0c;共有&#xff13;&#xff14;种运算符。 ③数据结构丰富&#xff0c;数据类型有&a…

mysql varchar java_关于MySQL varchar类型最大值,原来一直都理解错了

写在前面关于MySQL varchar字段类型的最大值计算&#xff0c;也许我们一直都理解错误了&#xff0c;本文从问题出发&#xff0c;经实践验证得出一些实用经验&#xff0c;希望对大家的开发工作有些帮助~背景描述最近同事在做技术方案设计时候&#xff0c;考虑到一个表设计时希望…

【CodeForces - 1027C】Minimum Value Rectangle (数学,公式化简,思维,卡常卡memset)

题干&#xff1a; You have nn sticks of the given lengths. Your task is to choose exactly four of them in such a way that they can form a rectangle. No sticks can be cut to pieces, each side of the rectangle must be formed by a single stick. No stick can …

mysql数据库业务逻辑_Mysql业务设计(逻辑设计)

逻辑设计数据库设计三大范式数据库设计第一大范式数据库表中所有的字段都只具有单一属性单一属性的列是由基本数据类型所构成设计出来的表都是简单的二维表数据库设计的第二大范式要求表中只有一个业务主键&#xff0c;也就是说符合第二范式的表不能存在非主键列&#xff0c;只…

lua进入压缩包_使用lua语言制作贪吃蛇游戏(love2d)(一)开发环境的搭建

本教程教大家使用lua制作一个贪吃蛇&#xff0c;游戏引擎使用love2d&#xff0c;因为它开源轻巧而且跨平台。1.开发环境搭建&#xff1a;windows系统&#xff1a;在windows系统下&#xff0c;首先我们进入官网www.love2d.org。love2d官网进入官网可以看到Download选项&#xff…

mysql rand() 子查询_MySQL ------ 子查询(十三)

查询&#xff08;query&#xff09;:任何SQL 都是查询&#xff0c;但此术语一般指select 语句子查询&#xff08;subquery&#xff09;:嵌套在查询中的查询&#xff0c;MySQL4.1 引入对子查询的支持。接下来得就比较有意思了&#xff0c;需要你对于表与表之间的关系有所了解&am…

centos 6.5 apache mysql php_CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

简单点的&#xff1a;1.关闭SELINUX&#xff1a;setenfo 0 暂时关闭2.安装Apache&#xff1a;yum install httpd3.安装MySQL&#xff1a;yum install mysql mysql-server4.安装PHP&#xff1a;yum install php5.相关的配置&#xff1a;PHP关联MySQL&#xff1b;httpd出错信息…

mysql 如何调用函数结果_MySQL自定义函数调用不出结果

自定义函数的代码&#xff1a;DROP FUNCTION IF EXISTS fn_HrStaffBase_GetNameFromidCarddelimiter //CREATE FUNCTION fn_HrStaffBase_GetNameFromidCard (a VARCHAR(30))RETURNS VARCHAR(50)beginreturn (SELECT staff_name FROM hr_staff_base where idCard a);END //--…

【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题)

题干&#xff1a; It is the middle of 2018 and Maria Stepanovna, who lives outside Krasnokamensk (a town in Zabaikalsky region), wants to rent three displays to highlight an important problem. There are nn displays placed along a road, and the ii-th of th…