P1841 [JSOI2007]重要的城市
题目描述
参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里。而食堂门前施工虽然也截断了原来通向计算中心的路,却没有使路程增加,因为可以找到同样长度的路作替代。其实,问题的关键在于,路截断的地方是交通要点。
同样的情况也出现在城市间的交通中。某些城市如果出了问题,可能会引起其他很多城市的交通不便。另一些城市则影响不到别的城市的交通。jsoi冬令营的同学发现这是一个有趣的问题,于是决定研究这个问题。
他们认为这样的城市是重要的:如果一个城市c被破坏后,存在两个不同的城市a和b(a, b均不等于c),a到b的最短距离增长了(或不通),则城市c是重要的。
jsoi冬令营的同学面对着一张教练组交给他们的城市间交通图,他们希望能找出所有重要的城市。现在就请你来解决这个问题。
输入输出格式
输入格式:
第一行两个整数N,M,N为城市数,M为道路数
接下来M行,每行三个整数,表示两个城市之间的无向边,以及之间的路的长度
输出格式:
一行,按递增次序输出若干的数,表示重要的城市。
输入输出样例
说明
30%的数据:N\le 20N≤20 ;
60%的数据:N\le 100N≤100 ;
100%的数据:N\le 200,M\le \frac{N\times (N-1)}{2},0<c\le 10000N≤200,M≤2N×(N−1),0<c≤10000 。c即路的长度。
保证不出现重边和自环
spfa+最短路树
#include <bits/stdc++.h>
using namespace std;
#define maxn 40010
typedef long long ll;
#define inf 2147483647
#define ri register int
//链式前向星
struct edge {
int to, next, w;
} e[maxn];
int tot = ;
int head[maxn];
void add(int u, int v, int w) {
e[++tot].to = v;
e[tot].next = head[u];
head[u] = tot;
e[tot].w = w;
}
// spfa
queue<int> que;
bool vis[maxn];
int dis[maxn];
//最短路树
int cnt[maxn];//记录相同最短路径长度个数
int fa[maxn]; //记录最短路径上的父亲 int n, m, x;
bool ans[maxn]; int main() {
ios::sync_with_stdio(false);
// freopen("test.txt", "r", stdin);
// freopen("outout.txt","w",stdout);
cin >> n >> m;
for (int i = ; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
add(u, v, w), add(v, u, w);
}
for (int s = ; s <= n; s++) {
memset(fa, , sizeof(fa));
memset(dis, , sizeof(dis));
memset(cnt, , sizeof(cnt));
memset(vis, , sizeof(vis));
dis[s] = ;
vis[s] = true;
que.push(s);
while (!que.empty()) {
int u = que.front();
que.pop();
vis[u] = false;//与bfs不同之处,就是为了让点重复进队列,没错,就算把源点也false掉,因为dist[s]=0,也没有造成影响
for (int p = head[u]; p; p = e[p].next) {
int v = e[p].to, w = e[p].w;
if (dis[v] == dis[u] + w)
cnt[v]++;//相同路径长度个数加一
if (dis[v] > dis[u] + w) {
dis[v] = dis[u] + w;
cnt[v] = ;//当父亲就只有一个的时候,那么他就是爆炸点了
fa[v] = u;
if (!vis[v]) {
vis[v] = true;
que.push(v);
}
}
}
}
for (int i = ; i <= n; i++) {
if (fa[i] != s && cnt[i] == )//这里不能取源点,取源点的话就只有两个点,但必须要有三个点才满足题意
ans[fa[i]] = true;
}
}
bool flag = true;
for (int i = ; i <= n; i++)
if (ans[i])
cout << i << " ", flag = false;
if (flag)
cout << "No important cities."; return ;
}
P1841 [JSOI2007]重要的城市的更多相关文章
- 洛谷 P1841 [JSOI2007]重要的城市 解题报告
P1841 [JSOI2007]重要的城市 题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向 ...
- 【floyd】【bitset】洛谷 P1841 [JSOI2007]重要的城市 题解
bitset玄学完美优化复杂度? 题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向计 ...
- 最短路【洛谷P1841】 [JSOI2007]重要的城市
P1841 [JSOI2007]重要的城市 题目描述 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向 ...
- Floyd【p1841】[JSOI2007]重要的城市
Description 参加jsoi冬令营的同学最近发现,由于南航校内修路截断了原来通向计算中心的路,导致去的路程比原先增加了近一公里.而食堂门前施工虽然也截断了原来通向计算中心的路,却没有使路程增加 ...
- 题解【洛谷P1841】[JSOI2007]重要的城市
题面 题解 最短路图模板题. 介绍一下最短路图: 先对原图跑一边单源最短路,求出源点到每个点\(i\)的最短路\(dis[i]\). 接下来构建新图:对于一条边\((x,y,v)\),若\(dis[x ...
- [JSOI2007]重要的城市(x)
开始(脑残ing)诶? 暴力能过 噼里啪啦码码码 TLE TLE 啥?看错复杂度?带个25的常数 ?*……!%@……*%#…!@#!@#……*!@#& Floyd,并记录两点间的一个重要的城市 ...
- [JSOI2007]重要的城市 floyd:最短路计数
---题面--- 题解: 其实感觉还是比较妙的,第一眼看题想到floyd统计最短路条数, 注意到对于任意两点x,y而言,floyd将会枚举其最短路所可能经过的所有中转点, 因此我们可以直接分别统计对于 ...
- 2019.2-2019.3 TO-DO LIST
DP P2723 丑数 Humble Numbers(完成时间:2019.3.1) P2725 邮票 Stamps(完成时间:2019.3.1) P1021 邮票面值设计(完成时间:2019.3.1) ...
- 2021.11.30 eleveni的水省选题的记录
2021.11.30 eleveni的水省选题的记录 因为eleveni比较菜,eleveni决定先刷图论,再刷数据结构,同时每天都要刷dp.当然,对于擅长的图论,eleveni决定从蓝题开始刷.当然 ...
随机推荐
- PoPo数据可视化周刊第6期
PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 本期可视化精彩视频请关注公众号浏览 全天智能获Pre-A ...
- mysql 导入时报错:Got a packet bigger than‘max_allowed_packet’bytes
原因是max_allowed_packet 值设置过小. 网上粘贴一段定义: max_allowed_packet:指代mysql服务器端和客户端在一次传送数据包的过程当中数据包的大小这个是定义mys ...
- P2P文件上传
采用uploadify上传 官网:http://www.uploadify.com/ (有H5版本和flash版本,H5收费,所以暂时用flash) uploadify的重要配置属性(http:/ ...
- Pwn with File结构体(三)
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面介绍了几种 File 结构体的攻击方式,其中包括修改 vtab ...
- 鉴别JS数据类型的全套方法
ECMAScript 标准定义了 7 种数据类型:Boolean.Null.Undefined.Number.String.Symbol(ES6新增)和Object,除Object以外的那6种数据类型 ...
- jquery刷新页面的实现代码(局部及全页面刷新)
局部刷新: 这个方法就多了去了,常见的有以下几种: $.get方法,$.post方法,$.getJson方法,$.ajax方法如下 前两种使用方法基本上一样 下面介绍全页面刷新方法:有时候可能会用到 ...
- iostat 工具分析I/O性能
iostat命令用途:主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和 ...
- [CENTOS7] 修改机器名:hostnamectl set-hostname host.domain
# hostnamectl set-hostname host.domain
- [翻译] ios-image-filters
ios-image-filters https://github.com/esilverberg/ios-image-filters photoshop-style filter interface ...
- [翻译] USING GIT IN XCODE [5] 在XCODE中使用GIT[5]
USING GIT IN XCODE USING BRANCHES Branches can be a very effective tool to isolate new features or e ...