旅游电车(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 ...
随机推荐
- 公司6:JrVue重用布局
JrVue是我们基于element重新封装的一套组件库; 为了提高开发效率, 方便对代码的统一管理和维护, 我们提供了一些统一的页面布局, 以及项目常用的中小型模块 我在master新拉一个分支J ...
- base64编码上传图片java后台接收实例
原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...
- MyEclipse无法自动编译项目故障一例
MyEclipse导入项目后发现无法自动编译,classes目录下没有编译的类. 尝试的解决方法: 1.刷新项目,失败: 2.project->clean-,失败: 3.关闭项目再次打开,失败: ...
- NLog简单配置与使用
对项目添加NLog 安装完成后,在项目里面会自动引入该引入的dll,并且会添加如下两个文件 NLog的配置主要是在这个config文件里.当然也可以将这个文件里面的nlog节点复制到项目配置文件App ...
- SqlServer知识点-操作xml
一.开发环境 SQL2010 二.开发过程 1.声明一个xml类型变量 DECLARE @xmlInfo XML; SET @xmlInfo = '<CompanyGroup> <C ...
- web开发----jsp中通用模版的引用 include的用法
1.静态引入的示例 通过对两种用法的了解之后 我们现在 使用静态引入 因为上述原因 我的模版页中 只有div 不会有 path等定义 也不会有html标签 如下: 我的header.jsp 全 ...
- 安卓TV盒子常见问题以及解决方法
1.为什么requestfocus无效 原因:requestfocus不支持在Touch模式下的Focus; 解法方案:再加一个requestFocusFromTouch函数. 2.摄像头打开问题,调 ...
- cookie的应用——浏览记录
实体类 package entity; public class Product { private String id; private String proName; private String ...
- struts2配置文件加载顺序
struts2配置文件加载顺序: struts-default.xml/ struts-plugin.xml/ struts.xml/ struts.properties/ web.xml
- wparam , lparam 传递消息
01.WM_PAINT消息 LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高 02.滚动条WM_VSCROLL或WM_HSCROLL消息 LOWORD(wParam) ...