codevs 3971 航班
B 国有N 座城市,其中1 号是这座国家的首都。
N 座城市之间有M 趟双向航班。i 号点的转机次数定义为:从1 号点到i ,最少需要转机几 次。如果1 根本无法到达i ,那么i 点的转机次数是无穷大。
由于天气原因,有些航班会被取消。
一趟航班的取消是可容忍的,仅当这趟航班取消之后,2..N 每个点的转机次数不变或者只 增加了1。
现在kAc 想知道,哪些航班的取消是可容忍的?
如果这样的航班不存在,输出一行 “hehe”(不含引号)
第一行两个正整数N, M
接下来M 行每行两个正整数a, b。表示当前这趟航班的两端是a,b 两座城市 ,保证a 不等于b ,且同一对a, b 只会出现一次。
若干整数,从小到大排序,表示所有的可容忍取消的航班序号。
5 6
1 2
1 3
1 4
3 4
2 5
3 5
2
3
4
5
6
如果1、2 两座城市间的航班被取消,2 号城市到首都原本需要0 次转机(有直达飞机) ,现
在需要先到5 ,再到3 ,再到1 ,转机2 次。这是不可忍受的。
对于40% :N, M<=500
对于70% :N<=500 M <= 50000
对于100% :N, M<=200000
保证初始给定图中所有点的转机次数不是无穷大。
这其实应该叫次短路,每次改一个点
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std; #define fr(x, E) for (__typeof(E.begin()) x = E.begin(); x != E.end(); x++)
//first ,second,指的是vector中定义的第几个元素
#define FR first
#define SC second
#define MP make_pair
#define PB push_back
#define PII pair<int, int>
#define LL long long
#define ALL(x) x.begin(), x.end()
#define SZ(x) ((int)(x).size())
const int MAXN = ;
vector<PII> e[MAXN];//存储边,和第航线序号
int n, m;
int from[MAXN], vis[MAXN], dis[MAXN];
bool isok[MAXN];
int main()
{
freopen("flight2.in", "r", stdin); freopen("flight.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = ; i <= m; i++){
int a, b;
scanf("%d%d", &a, &b);
e[a].PB(MP(b, i)); e[b].PB(MP(a, i));
}
static queue<int> Q;//宽搜各个顶点到首都的转机次数。
Q.push(); vis[] = true;//首都1入队列;
while(SZ(Q)){//队列非空
int x = Q.front(); Q.pop();
fr(it, e[x])//和队首顶点关联的每个顶点
if (!vis[it->FR]){//如果没入队列则入队列
vis[it->FR] = true;
dis[it->FR] = dis[x] + ;
from[it->FR] = it->SC;//记录最短路径航线
Q.push(it->FR);
}
}
bool ok = true;
for (int i = ; i <= n; i++){
bool nok = true; //假设对应最短路不可以替换
fr(it, e[i])//遍历顶点i的每个关联顶点 , //如果存在不在最短路径上,而且距离不超过当前距离的代替顶点 ,
if (it->SC != from[i] && dis[it->FR] <= dis[i])
nok = false;//那么,此顶点对应的最短路径这条航线是可以替换的。
isok[from[i]] = nok;
}
bool ex = false;
for (int i = ; i <= m; i++) if (!isok[i]){
printf("%d\n", i); ex = true;
}
if (!ex) puts("hehe");
}
codevs 3971 航班的更多相关文章
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
- codevs 2830 蓬莱山辉夜
2830 蓬莱山辉夜 http://codevs.cn/problem/2830/ 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑, ...
随机推荐
- C. Dasha and Password 预处理 + dp
http://codeforces.com/contest/761/problem/C 对于每一个字符串,可以预处理出其到达数字,字母,和特殊符号所需的最小步数. 然后就是在n个东西中,选出数字.字母 ...
- ASP.Net 控件
简单控件 Label -作用是显示文字,编译后元素是Span 1.文本类 边框: BorderColor 边框颜色 BordersTyle 边框样式 BorderWidth 边框粗细 Literal- ...
- (六)SpringIoc之延时加载
Spring容器初始化时将所有scope = singleton的bean进行实例化. 通常情况下这是一件好事,因为这样在配置中的错误会更容易发现.但是如果不想spring容器初始化就实例化就要用到延 ...
- spark源码编译,运行example遇到:NoClassDefFoundError: org/spark_project/guava/cache/CacheLoader
基本环境: win10+idea Scala2.11.8 maven3.5.3 spark2.1.0 问题: 在window10下编译spark2.1.0源码,在idea下运行example,遇到问题 ...
- iOS Programming Camera 1
iOS Programming Camera 1 1 Displaying Images and UIImageView 1.1 put an instance of UIImageView o ...
- Node.js——Buffer
介绍 JavaScript没有读取和操作二进制数据流的机制,但是 node.js 引入了Buffer 类型,可以操作TCP流或者文件流 使用Buffer可以用来对临时数据(二进制数据)进行存储,当我们 ...
- 【译】x86程序员手册34-9.7错误代码
9.7 Error Code 错误代码 With exceptions that relate to a specific segment, the processor pushes an error ...
- 针对windowsserver 创建iis站点访问出错的解决方案(HTTP 错误 500.19 - Internal Server Error)
错误如下: 服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详 ...
- Custom Operators
New operators are declared at a global level using the operator keyword, and are marked with the pre ...
- create_module - 生成一条可加载模块记录
总览 #include <linux/module.h> caddr_t create_module(const char *name, size_t size); 描述 create_m ...