zoukankan      html  css  js  c++  java
  • Data Center Maintenance CodeForces

    http://codeforces.com/contest/950/problem/E

    贴一份板子

     1 #include<cstdio>
     2 #include<vector>
     3 #include<algorithm>
     4 using namespace std;
     5 struct E
     6 {
     7     int to,nxt;
     8 }e[200100];
     9 int f1[100100],ne,a[100100],sccc,sccnum[100100],top,dfn[100100],low[100100],dfsc;
    10 int s[100100],n,m,h,ou[100100],anss=0x3f3f3f3f,ans1;
    11 vector<int> sccx[100100];
    12 void me(int u,int v)
    13 {
    14     e[++ne].to=v;
    15     e[ne].nxt=f1[u];
    16     f1[u]=ne;
    17 }
    18 
    19 void dfs(int u)
    20 {
    21     dfn[u]=low[u]=++dfsc;
    22     s[++top]=u;
    23     for(int k=f1[u],v;k!=0;k=e[k].nxt)
    24     {
    25         v=e[k].to;
    26         if(!dfn[v])
    27         {
    28             dfs(v);
    29             low[u]=min(low[u],low[v]);
    30         }
    31         else if(!sccnum[v])
    32             low[u]=min(low[u],dfn[v]);
    33     }
    34     if(low[u]==dfn[u])
    35     {
    36         sccc++;
    37         while(top&&s[top]!=u)    sccnum[s[top--]]=sccc;
    38         sccnum[s[top--]]=sccc;
    39     }
    40 }
    41 
    42 int main()
    43 {
    44     int c1,c2,i,k;
    45     scanf("%d%d%d",&n,&m,&h);
    46     for(i=1;i<=n;i++)    scanf("%d",&a[i]);
    47     for(i=1;i<=m;i++)
    48     {
    49         scanf("%d%d",&c1,&c2);
    50         if((a[c1]+1)%h==a[c2])    me(c1,c2);
    51         if((a[c2]+1)%h==a[c1])    me(c2,c1);
    52     }
    53     for(i=1;i<=n;i++)
    54         if(!dfn[i])
    55             dfs(i);
    56     for(i=1;i<=n;i++)
    57         for(k=f1[i];k!=0;k=e[k].nxt)
    58             if(sccnum[e[k].to]!=sccnum[i])
    59                 ou[sccnum[i]]++;
    60     for(i=1;i<=n;i++)
    61         sccx[sccnum[i]].push_back(i);
    62     //printf("%da
    ",ou[1]);
    63     for(i=1;i<=sccc;i++)
    64         if(ou[i]==0&&sccx[i].size()<anss)
    65         {
    66             anss=sccx[i].size();
    67             ans1=i;
    68         }
    69     printf("%d
    ",anss);
    70     for(i=0;i<anss;i++)    printf("%d ",sccx[ans1][i]);
    71     return 0;
    72 }
  • 相关阅读:
    20201022-1 每周例行报告
    2020高级软件工程“领跑衫”获奖感言
    20201015-3 每周例行报告
    20201008-1 每周例行报告
    竞拍作业
    20201207-总结-作业
    20201126-1每周例行报告
    20201120-1每周例行报告
    20201112 -1每周例行报告
    20201105-1例行报告
  • 原文地址:https://www.cnblogs.com/hehe54321/p/8848099.html
Copyright © 2011-2022 走看看