题目描述 Description

B 国有N 座城市,其中1 号是这座国家的首都。

N 座城市之间有M 趟双向航班。i 号点的转机次数定义为:从1 号点到i ,最少需要转机几 次。如果1 根本无法到达i ,那么i 点的转机次数是无穷大。

由于天气原因,有些航班会被取消。

一趟航班的取消是可容忍的,仅当这趟航班取消之后,2..N 每个点的转机次数不变或者只 增加了1。

现在kAc 想知道,哪些航班的取消是可容忍的?

如果这样的航班不存在,输出一行 “hehe”(不含引号)

输入描述 Input Description

第一行两个正整数N, M

接下来M 行每行两个正整数a, b。表示当前这趟航班的两端是a,b 两座城市 ,保证a 不等于b ,且同一对a, b 只会出现一次。

输出描述 Output Description

若干整数,从小到大排序,表示所有的可容忍取消的航班序号。

样例输入 Sample Input

5 6

1 2

1 3

1 4

3 4

2 5

3 5

样例输出 Sample Output

2

3

4

5

6

数据范围及提示 Data Size & Hint

如果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 航班的更多相关文章

  1. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  4. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  5. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  6. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  7. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  8. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

  9. codevs 2830 蓬莱山辉夜

    2830 蓬莱山辉夜 http://codevs.cn/problem/2830/ 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑, ...

随机推荐

  1. GUI初步和frame&panel

    java的话这个GUI其实不是什么重点,但我们也要学习,重点是学习这种图形编程的思路. java里面对于图形的一些类都封装在了AWT和它的一些子包里.AWT(抽象窗口开发包)            当 ...

  2. Jquery操作常用表单元素

    由于对前端的东西不是很熟练,导致jquery操作表单的东西总是忘记,每次用都要查一下,效率低下,记录下来,以便下次使用. CheckBox checkbox改变事件 $('#IsAllSearch') ...

  3. AJPFX对equals()方法和==异同的比较

    equals()方法是Object类的方法,所有的类都集成了此方法,还有部分类重写了这个方法,我们看一下Object类中关于该方法的的源码: public boolean equals(Object ...

  4. Redis和SpringDataRedis

    一.Redis简介 ​ Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,运行在内存中,由ANSI C编写.企业开发通常采用Redis来实现缓存.同类的产品还有memcac ...

  5. 460在全志r16平台tinav3.0系统下使用i2c-tools

    460在全志r16平台tinav3.0系统下使用i2c-tools 2018/9/6 19:05 版本:V1.0 开发板:SC3817R SDK:tina v3.0 1.01原始编译全志r16平台ti ...

  6. iOS Programming UIStoryboard 故事板

    iOS Programming UIStoryboard In this chapter, you will use a storyboard instead. Storyboards are a f ...

  7. 中国版 Office 365 (X-Tenant / Tango) 功能验证报告 - 1 简介

    花了点时间做了一次Office 365 X-Tenant的 POC,对过程做了记录和总结,在这里会陆续分享: (一) 简介 这次POC的系统环境是模拟一个公司的生产环境: 1. 公司总部在国外,拥有 ...

  8. 谈谈Java中的集合

    对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Collection代表一组Object,即Collect ...

  9. hystrix 解决服务雪崩效应

    1.服务雪崩效应 默认情况下tomcat只有一个线程池去处理客户端发送的所有服务请求,这样的话在高并发情况下,如果客户端所有的请求堆积到同一个服务接口上, 就会产生tomcat的所有线程去处理该服务接 ...

  10. SpringBoot 快速开发框架

    学习资源:https://ke.qq.com/course/260513(这是Springboot升级版本教程,里面还有一个初级版本的) 1.第一个测试程序,那个覆盖方法加上@Override会报错, ...