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 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑, ...
随机推荐
- Ubuntu编译安装Apache
第一步:编译安装依赖包apr,apr-util和pcre ./configure --prefix= make && make install 第二步:编译安装Apache ./con ...
- redis 远程连接方法
解决方法 1.修改redis服务器的配置文件 vi redis.conf 注释以下绑定的主机地址 # bind 127.0.0.1 或 vim redis.conf bind 0.0.0.0 pr ...
- (二)Spring容器
大佬总结的很好,请去看大佬博客. http://www.cnblogs.com/chenssy/archive/2012/11/15/2772287.html https://www.cnblogs. ...
- [Windows Server 2008] PHP安装Memcached
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:Windows ...
- 【译】x86程序员手册34-9.7错误代码
9.7 Error Code 错误代码 With exceptions that relate to a specific segment, the processor pushes an error ...
- 迅为双核imx6DL核心板_ARM定制专家_Cortex SATA 千兆网 4G GPS
核心板参数 尺寸:51mm*61mm CPU:Freescale Cortex-A9 双核精简版 i.MX6DL,主频 1.2 GHz 内存:1GB DDR3 存储:8GB EMMC 存储 EEPRO ...
- 单页vue路由router
Vue.js + vue-router 可以很简单的实现单页应用. <router-link> 是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容. to 属性为目标地址, ...
- filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration interface"
filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration inter ...
- vue 接口统一管理
在外部创建一个API文件夹,然后创建一个API.js 例如 const filmbanner = 'api/billboard/home?__t=1498823077473'; const film ...
- C++命名空间、标准库(std,全局命名空间)
背景 别人遇到的问题: C++ 全局变量不明确与 using namespace std 冲突 我遇到的问题与他相似,函数调用冲突 using namespace std; class compare ...