不想吐槽题目....

/*
K bulabula 算法(好像用哪个T bulabula更简单 然而我并不会 - -)
丑陋的处理cnt:
Printf时 cnt中 ans[i][0]==1 的删掉
然后更丑陋的处理强连通分量的出度 :
先把所包含的所有点f 成1 然后以每个点为起点跑一边 看看是不是出度指向本连通分量内的点
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<algorithm>
#define maxn 1010
using namespace std;
stack<int>s;
int out[maxn];
int ans[maxn][maxn],n,m,f[maxn],cnt,vis[maxn][maxn];
int head1[maxn],head2[maxn],num;
struct node
{
int u,v,per;
}e1[maxn],e2[maxn];
void Input()
{
cin>>n>>m;
int i,a,b;
for(i=;i<=m;i++)
{
cin>>a>>b;
num++;
e1[num].u=a;
e1[num].v=b;
e1[num].per=head1[a];
head1[a]=num;
e2[num].u=b;
e2[num].v=a;
e2[num].per=head2[b];
head2[b]=num;
}
}
void Dfs1(int x)
{
int i;
f[x]=;
for(i=head1[x];i;i=e1[i].per)
if(f[e1[i].v]==)
Dfs1(e1[i].v);
s.push(x);
}
void Dfs2(int x)
{
ans[cnt][]++;
ans[cnt][ans[cnt][]]=x;
f[x]=;
int i;
for(i=head2[x];i;i=e2[i].per)
if(f[e2[i].v]==)
Dfs2(e2[i].v);
}
void Kosa()
{
int i;
for(i=;i<=n;i++)
if(f[i]==)
Dfs1(i);
memset(f,,sizeof(f));
while(!s.empty())
{
int tmp=s.top();
s.pop();
if(f[tmp]==)
{
cnt++;
Dfs2(tmp);
}
}
}
void Printf()//丑陋的处理....
{
int i,j,jian=,tot=,tmp[maxn],size;
for(i=;i<=cnt;i++)
if(ans[i][]==)jian++;//只有一个节点的 --
cout<<cnt-jian<<endl;
for(i=;i<=cnt;i++)
{
int flag=;
if(ans[i][]==)continue;//只有一个节点的 pass
memset(f,,sizeof(f));
for(j=;j<=ans[i][];j++)f[ans[i][j]]=;
for(j=;j<=ans[i][];j++)
{
int k;
for(k=head1[ans[i][j]];k;k=e1[k].per)
if(f[e1[k].v]==)
flag=;
}
if(!flag)
{
tot++;
tmp[maxn]={},size=;
for(j=;j<=ans[i][];j++)//记下答案 并排序
tmp[++size]=ans[i][j];
sort(tmp+,tmp++size);
}
}
if(tot!=)cout<<-;
else
{
for(j=;j<=size;j++)
cout<<tmp[j]<<" ";
}
}
int main()
{
Input();
Kosa();
Printf();
}

最新文章

  1. JavaScript模板引擎artTemplate.js——两种方法实现性别的判定
  2. C#学习笔记---Dispose(),Finalize(),SuppressFinalize
  3. Windows下如何修改php.ini的访问路径?
  4. FreeCodeCamp 前端初级算法(个人向)
  5. URL和URI的区别与联系
  6. 《OD学storm》20160827
  7. SQL Server解决死锁问题
  8. laravel 框架学习资料
  9. GO语言中的指针
  10. java volatile的一个验证反例(转)
  11. Enum in Java
  12. pm am 12小时格式化
  13. 关于linux内核驱动开发中Makefile编译的问题
  14. 基于CRM跟进(活动)记录中关键字识别的客户跟进加权值的成单概率算法
  15. centos 7 mysql启动失败--学会看错误日志
  16. learning makefile multiple target
  17. Mysql 性能优化5【重要】数据库结构优化
  18. Storm 运行例子
  19. 如何监视和更新 Azure 中的 Linux 虚拟机
  20. 【转】python多版本并存,python3安装pip

热门文章

  1. LightOj_1265 Island of Survival
  2. C#错误与异常处理
  3. 《Journey》风之旅人;
  4. nutch getOutLinks 外链的处理
  5. 用SharedPreferences保存List(Map(String, String))数据
  6. 【HDOJ】3584 Cube
  7. 【POJ】2828 Buy Tickets
  8. To enable integrated Windows authentication in Windows Vista/IIS 7
  9. (转载)shell中用date命令获取昨天、明天或者多天前的日期
  10. ubuntu 安装配置JDK