旅游电车(cogs 1175)
【问题描述】
Henryy国正致力于首都的一个旅游电车建设工程。首都有N个旅游景区。Henryy国的电车永远只沿道路规定的方向行驶,为了不使投入使用的电车有可能无法回到它的起始站,Henryy希望知道他的首都的可以在哪些景区设置站点。一个景区可以被设置成车站,当且仅当对于任意一个从该景区出发所能到达的景区,均至少有一条路可回到该景区。你的同事已完成了一份景区之间的道路连通情况的报告。报告中将给出首都的景区数目N、道路总数M以及一些形如“景区A和景区B之间有一条从A到B的单向道路”的信息。现在明确你的任务:根据报告中的信息,列出所有可以被设置成车站的景区。
【输入文件】
输入文件由多份报告组成(这些报告相互无任何联系),每份报告包括:N,M,接下来M对整数Ai、Bi (1<=I<=M)表示Ai和Bi之间有一条单向道路Ai->Bi。仅一个包含整数N=0的报告表示你的工作结束,你的程序不应该对此有任何反应。各整数间用空格或空行分隔。对于任意景区,分别以该景区为起点或终点的道路总数均不超过50。
【输出文件】
对于每份报告,输出一行列表包括:所有能被设置成电车站点的景区编号,各编号之间用一个空格隔开。
【样例输入】
- 5 6
- 1 2
- 2 3
- 3 4
- 4 1
- 2 5
- 5 2
- 1 0
- 0
【样例输出】
- 1 2 3 4 5
- 1
【数据约定】
对于40%的数据,有N<=200。
对于100%的数据,有N<=5000,M<=50000。
- /*
- tarjan算法
- 题目要求求出的点满足它能连到的点也能连回来,那么就一定要与它在同一缩点中,如果一个缩点出度大于1,那么这个缩点中的所有点都不满足要求。
- */
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #define M 5010
- using namespace std;
- int num[M],low[M],instack[M],vis[M],belong[M],out[M],a[M][M],s
- [M*],cnt,indexx,top;
- int head[M],n,m,ans[M];
- struct node
- {
- int v,pre;
- };node e[M*];
- int read()
- {
- char c=getchar();int num=,flag=;
- while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
- while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
- return num*flag;
- }
- void add(int i,int x,int y)
- {
- e[i].v=y;
- e[i].pre=head[x];
- head[x]=i;
- }
- void tarjan(int v)
- {
- num[v]=low[v]=++indexx;
- vis[v]=instack[v]=;
- s[++top]=v;
- for(int i=head[v];i;i=e[i].pre)
- {
- int w=e[i].v;
- if(!vis[w])
- {
- tarjan(w);
- low[v]=min(low[v],low[w]);
- }
- else if(instack[w])
- low[v]=min(low[v],num[w]);
- }
- int u;
- if(num[v]==low[v])
- {
- ++cnt;
- do
- {
- u=s[top--];
- instack[u]=;
- belong[u]=cnt;
- a[cnt][++a[cnt][]]=u;
- }while(u!=v);
- }
- }
- void work()
- {
- for(int i=;i<=m;i++)
- {
- int x=read(),y=read();
- add(i,x,y);
- }
- for(int i=;i<=n;i++)
- if(!vis[i])tarjan(i);
- for(int i=;i<=n;i++)
- for(int j=head[i];j;j=e[j].pre)
- if(belong[i]!=belong[e[j].v])
- out[belong[i]]++;
- int k=;
- for(int i=;i<=cnt;i++)if(!out[i])
- for(int j=;j<=a[i][];j++)
- ans[++k]=a[i][j];
- sort(ans+,ans+k+);
- for(int i=;i<=k;i++)
- printf("%d ",ans[i]);
- printf("\n");
- }
- int main()
- {
- freopen("buss.in","r",stdin);
- freopen("buss.out","w",stdout);
- while()
- {
- n=read();if(!n)break;
- m=read();
- memset(head,,sizeof(head));
- memset(num,,sizeof(num));
- memset(low,,sizeof(low));
- memset(vis,,sizeof(vis));
- memset(instack,,sizeof(instack));
- memset(s,,sizeof(s));
- memset(e,,sizeof(e));
- memset(belong,,sizeof(belong));
- memset(out,,sizeof(out));
- memset(a,,sizeof(a));
- indexx=cnt=top=;
- work();
- }
- return ;
- }
旅游电车(cogs 1175)的更多相关文章
- COGS——T 1175. [顾研NOIP] 旅游电车
http://www.cogs.pro/cogs/problem/problem.php?pid=1175 ★★☆ 输入文件:buss.in 输出文件:buss.out 简单对比时间限制: ...
- cojs 1175. [顾研NOIP] 旅游电车
1175. [顾研NOIP] 旅游电车 ★★☆ 输入文件:buss.in 输出文件:buss.out 简单对比时间限制:1 s 内存限制:256 MB [问题描述] Henryy国正致 ...
- AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867
[国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...
- BZOJ 2157: 旅游( 树链剖分 )
树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...
- 旅游公司招聘Java工程师
公司招聘:岗位要求如下 Java开发工程师工作内容1.根据需求完成软件系统代码的开发,测试以及文档撰写工作:2.分析并解决客户的问题:3.配合业务部门进行数据分析以及系统优化 岗位要求:1.本科以上学 ...
- 基于GIS的旅游辐射区人口统计
在旅游规划中,考虑旅游景点周边的人口负载量是很重要的一个方面,这将直接影响资源的投入和配置,开发潜力和规模等.基于GIS可以将人口信息进行空间化的展示,还可以通过空间分析的方法计算出旅游景点辐射区的人 ...
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...
- 中国175个 AAAAA级风景区,去过20个 以上,你就是旅游达人
省份 数量 景区名称 我 北京 7 故宫博物院 1 天坛公园 颐和园 1 八达岭-慕田峪长城旅游区 1 明十三陵景区(神路-定陵-长陵-昭陵) 恭王府景区 北京奥林匹克公园(鸟巢-水立方-中国科技馆- ...
- VR技术驱动智慧旅游,自由漫步西湖不是梦
虚拟现实技术是今年最热门的科技之一,不少行业都在嫁接VR功能,其中旅游业也具备这方面的优势.VR+旅游,能让你足不出户即可感受清净唯美的名胜古迹.据591ARVR资讯网www.591arvr ...
随机推荐
- canvas particles
var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var Grewer = { in ...
- codechef: ADAROKS2 ,Ada Rooks 2
又是道原题... (HDU 6313 Hack It , 多校 ACM 里面的题) 题目说构造一个 n * n 矩阵,染色点不得构成矩形...然后染色点个数至少 8 * n 然后我们生成一个数 m , ...
- AGC16E Poor Turkeys
输入样例: 10 10 8 9 2 8 4 6 4 9 7 8 2 8 1 8 3 4 3 4 2 7 输出样例#6: 5 话说这题虽然不是很OI但是确实挺锻炼思维的 一开始以为是用并查集之类的东西维 ...
- yii int
@echo off rem ------------------------------------------------------------- rem Yii command line ini ...
- Farseer.net轻量级开源框架 入门篇:添加数据详解
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...
- Android Measure 体系简单总结
Android对View的测量是半协商半强制半模糊半具体的. 测量过程中的两套尺寸体系: [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure ...
- 打造个人的vimIDE
环境说明 系统版本:centos7.Ubuntu16 vim版本:7.4 安装git工具 整体说明:本文的vim配置是针对Linux的单个系统用户,python的自动补全使用的是 jedi-vim 插 ...
- 手机端h5复制功能
html: <a href="javascript:;" id="copyBtn" class="f-r tac" data-clip ...
- Queueingconsumer 找不到
springboot从1.5.9升级到2.0.0,queueingconsumer报错没有这个类,改为使用 DefaultConsumer
- thupc & cts & apio & thusc 游记 (北京17日游记)
thupc & cts & apio & thusc 游记 (北京17日游记) Day 0 和隔壁校两人py了一下,六个人组了两队,(左哼哼)与(右哼哼),我和Camoufla ...