1198. Jobbery
http://acm.timus.ru/problem.aspx?space=1&num=1198
英语真的是硬伤呀 读了N遍 愣是没有读懂 最后看了别人的提示
反正是联通分量 缩点 然后对缩点后的图进行求解 缩点后的图必须有且仅有一个点入度为0
然后输出这个入度为0的点所包含的所有原来的点 (按顺序)
注意输入数据量很多 要用scanf 用cin 有可能超时
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<cmath>
#define LL long long
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;const int N=2005;
const int INF=0x3f3f3f3f;
//typedef pair<int,int>point;
int head[N],I;
struct node
{int j,next;
}side[N*2000];
int dfn[N],low[N],f[N],deep;
bool visited[N],in[N];
int sum[N];
stack<int>st;
void add(int i,int j)
{side[I].j=j;side[I].next=head[i];head[i]=I++;
}
void dfs(int x)
{dfn[x]=low[x]=deep++;st.push(x);in[x]=true;visited[x]=true;for(int t=head[x];t!=-1;t=side[t].next){int j=side[t].j;if(!visited[j]){dfs(j);low[x]=min(low[x],low[j]);}else if(in[j]){low[x]=min(low[x],dfn[j]);}}if(low[x]==dfn[x]){while(st.top()!=x){in[st.top()]=false;f[st.top()]=x;st.pop();}in[st.top()]=false;f[st.top()]=x;st.pop();}
}
int main()
{int n;while(scanf("%d",&n)!=EOF){memset(head,-1,sizeof(head));I=0;for(int i=1;i<=n;++i){int k;while(scanf("%d",&k)){if(k==0) break;add(i,k);}}while(!st.empty())st.pop();memset(in,false,sizeof(in));memset(visited ,false,sizeof(visited));deep=1;for(int i=1;i<=n;++i)if(!visited[i])dfs(i);memset(sum,0,sizeof(sum));for(int i=1;i<=n;++i){for(int t=head[i];t!=-1;t=side[t].next){int j=side[t].j;if(f[i]!=f[j])++sum[f[j]];}}vector<int>vt;int flag=0;for(int i=1;i<=n;++i)if(sum[f[i]]==0){vt.push_back(i);if(flag==0)flag=f[i];else if(f[i]!=flag)flag=-1;}if(flag>0){sort(vt.begin(),vt.end());for(unsigned int i=0;i<vt.size();++i)cout<<vt[i]<<" ";}cout<<"0"<<endl;}
}
转载于:https://www.cnblogs.com/liulangye/archive/2013/01/18/2866704.html
1198. Jobbery相关推荐
- Codeforces 1198 1199
1198 D 你需要维护一个序列,支持两种操作: 对于 \(1\le i\le n\) , \(a[i] \leftarrow \max(a[i],x)\) : 对于给定的 \(p\) , \(a[p ...
- hdu 1198 Farm Irrigation
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1198 题目大意: 有一大块土地需要浇水,这块土地由很多的小块土地(有十一种)组成,小块土地上有水沟, ...
- 信息学奥赛一本通(1198:逆波兰表达式)
1198:逆波兰表达式 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9734 通过数: 5698 [题目描述] 逆波兰表达式是一种把运算符前置的算术表达 ...
- 题目1198:a+b
题目描述: 实现一个加法器,使其能够输出a+b的值. 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出: 可能有多组测试数据,对于每组数据, 输出a+b的值. 样例输入: 2 6 ...
- 向大佬学习C语言1198: 考试排名(二)(结构体专题)
题目 1198: 考试排名(二)(结构体专题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3737 解决: 728ACM 国际大学生程序设计竞赛,英文全称:ACM Internatio ...
- 1198: 考试排名(二)(结构体专题)
1198: 考试排名(二)(结构体专题) 题目描述 ACM 国际大学生程序设计竞赛,英文全称:ACM International Collegiate Programming Contest(ACM- ...
- 信息学奥赛一本通 1198:波兰表达式 | OpenJudge NOI 2.2 1696:波兰表达式
[题目链接] ybt 1198:波兰表达式 OpenJudge NOI 2.2 1696:波兰表达式 注:ybt上描述的其实是波兰表达式,而题目中的文字都是逆波兰表达式,是笔误了,应该当做波兰表达式看 ...
- 1198:逆波兰表达式
1198:逆波兰表达式 <这里应该是波兰表达式(前缀表达式),而逆波兰指的是后缀表达式> 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 逆波 ...
- 吴昊品游戏核心算法 Round 9 —— 黑白棋AI系列之西洋跳棋(第二弹)(双向BFS+STL)(POJ 1198)...
接上回,如图所示,这是黑白棋的一个变种,Solitaire也是一种在智能手机上普遍存在的一种游戏.和翻转棋(Flip Game)一样,西洋跳棋(Solitaire)也没有正统的黑白棋(奥赛罗,又称Ot ...
最新文章
- layui 横向表单_对layui中表单元素的使用详解
- c++ string 长度限制_String 有多长?
- Ubuntu18.04提示wifi无法连接
- 5、用枚举值表示状态、选项、状态码
- 线条边框简笔画图片大全_超治愈萌系手帐素材大全 美食旅游花草人物花边都备齐了...
- python加入中小学课程_【python即将进入中学课堂,编程从小抓起,竟然在这几点上应验了】- 环球网校...
- kendo Grid json解析的问题
- STM32-串口通信
- Madagascar的自定义浮点型函数--绝对值函数和最值函数
- [转][SVN] Hook scripts的使用方法
- 练字第一方案失败,转向第二方案
- VMware-NAT连接网络
- 服务器操作系统修复补丁,最后的更新!微软Windows 7发布KB4534310修复补丁
- 怎样用计算机才能更快,如何让网速变快,详细教您怎么让电脑网速变快
- 读书笔记-opencv-极坐标变换
- 漫谈区块链“羊群效应”
- 供应链协作平台产品设计思维导图
- 【Axure基础教程】第19章 树节点
- 手把手教你用vue+JavaScript+openlayers+iview制作实时天气预报图
- Python 位置名称通过高德API获取行政区划信息ByMySQL
热门文章
- Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
- CSS中flex和inline-flex的区别
- ios 内存管理的理解(一) 简述
- Android merge优化UI
- npm命令Error: EINVAL: invalid argument, mkdir
- 01 安装ansible
- Docker swarm集群搭建教程
- 第七天Python学习记录
- PHP--金额数字转换成英文
- [**收藏**] Warcraft 小游戏 -- Tower Defense(1) -- Flash Element TD