• codevs 2822 爱在心中


    codevs 2822 爱在心中

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
    题目描述 Description

    “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动。爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home。”

    在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况)。爱是具有传递性的,即如果A爱B,B爱C,则A也爱C。
    如果有这样一部分人,他们彼此都相爱,则他们就超越了一切的限制,用集体的爱化身成为一个爱心天使。
    现在,我们想知道在这个爱的国度里会出现多少爱心天使。而且,如果某个爱心天使被其他所有人或爱心天使所爱则请输出这个爱心天使是由哪些人构成的,否则输出-1。

    输入描述 Input Description

    第1行,两个数N、M,代表爱的国度里有N个人,爱的关系有M条。
    第2到第M+1行,每行两个数A、B,代表A爱B。

    输出描述 Output Description

    第1行,一个数,代表爱的国度里有多少爱心天使。
    第2行,如果某个爱心天使被其他所有人和爱心天使所爱则请输出这个爱心天使是由哪些人构成的(从小到大排序),否则输出-1。

    样例输入 Sample Input

    样例输入1:

    6 7
    1 2
    2 3
    3 2
    4 2
    4 5
    5 6
    6 4


    样例输入2:

    3 3
    1 2
    2 1
    2 3

    样例输出 Sample Output

    样例输出1:

    2
    2 3

    样例输出2:

    1
    -1

    数据范围及提示 Data Size & Hint

    各个测试点1s

      1 #include<iostream>
      2 using namespace std;
      3 #include<cstdio>
      4 #include<algorithm>
      5 #define N 10000
      6 #include<stack>
      7 stack <int> sta;
      8 bool instack[N]={false};
      9 int n,m;
     10 struct Edge{
     11     int u,v,last;
     12 }edge[N<<1];
     13 int dfn[N],low[N],father[N];
     14 int t=0,sum=0,head[N]={0},topt=0,outdu[N]={0},sumout=0,ans1[N],ans2[N];
     15 void add_edge(int u,int v)
     16 {
     17     edge[++t].v=v;
     18     edge[t].u=u;
     19     edge[t].last=head[u];
     20     head[u]=t;
     21 }
     22 void input()
     23 {
     24     scanf("%d%d",&n,&m);
     25     int u1,v1;
     26     for(int i=1;i<=m;++i)
     27     {
     28         scanf("%d%d",&u1,&v1);
     29         add_edge(u1,v1);
     30     }
     31 }
     32 void tarjan(int k)
     33 {
     34     dfn[k]=low[k]=++topt;
     35     sta.push(k);
     36     instack[k]=true;
     37     for(int l=head[k];l;l=edge[l].last)
     38     {
     39         if(dfn[edge[l].v]==0)
     40         {
     41             tarjan(edge[l].v);
     42             low[k]=min(low[k],low[edge[l].v]);
     43         }
     44         else if(instack[edge[l].v])
     45                 low[k]=min(low[k],dfn[edge[l].v]);
     46     }
     47     if(dfn[k]==low[k])
     48     {
     49         int js=0;
     50         int x;
     51         do
     52         {
     53             x=sta.top();
     54             sta.pop();
     55             father[x]=k;
     56             instack[x]=false;
     57             js++;
     58         }while(x!=k);
     59         if(js>=2)
     60           ans1[++ans1[0]]=k;
     61     }
     62 }
     63 bool work()
     64 {
     65     for(int i=1;i<=m;++i)
     66     {
     67         int x=father[edge[i].u];
     68         int y=father[edge[i].v];
     69         if(x==y) continue;
     70         outdu[x]++;
     71     }
     72     int comp;
     73     for(int i=1;i<=ans1[0];++i)
     74     {
     75         if(outdu[ans1[i]]==0) 
     76         {
     77             sumout++;
     78             comp=ans1[i];
     79         }
     80     }
     81     if(sumout!=1) return false;
     82     for(int i=1;i<=n;++i)
     83     {
     84         if(father[i]==comp)
     85         {
     86             ans2[++ans2[0]]=i;
     87         }
     88     }
     89     return true;
     90 }
     91 int main()
     92 {
     93     input();
     94     for(int i=1;i<=n;++i)
     95     {
     96         if(!dfn[i])
     97           tarjan(i);
     98     }
     99     printf("%d
    ",ans1[0]);
    100     if(work())
    101     {
    102         sort(ans2+1,ans2+ans2[0]+1);
    103         for(int i=1;i<=ans2[0];++i)
    104           printf("%d ",ans2[i]);
    105         printf("
    ");
    106     }else printf("-1
    ");
    107     return 0;
    108 }
  • 相关阅读:
    watch 监听路由的改变
    三元运算符
    element-ui动态更改el-table某个单元格字体颜色
    vue 跨域问题导致前端无法携带cookie
    Vue 用checkbox实现两两组合多选且禁用第三个。
    表格数据宽度自适应方案
    echarts细节问题
    es6 解构赋值
    学习笔记-Python基础15-持久化-文件、pickle、shelve
    学习笔记-Python基础14-PyCharm调试
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5750855.html
Copyright © 2020-2023  润新知