zoukankan      html  css  js  c++  java
  • CF 949C Data Center Maintenance——思路+SCC

    题目:http://codeforces.com/contest/949/problem/C

    可以想到可能是每组c有连边的可能。

    但别直接给c1、c2连边,那样之后会变得很不好做。

    可以把一些限制放在连边这个环节上。

    也就是只有(c1+1)%h==c2才从c1向c2连边表示选了c1必须选c2!c2向c1也是一样。

    然后缩个点找无出度的最小的点就行了。

    边注意开成两倍——一组c也可能连两条边,%2之类的。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=1e5+5;
    int n,m,h,a[N],hd[N],xnt,dfn[N],low[N],tim;
    int stack[N],top,cnt,col[N],siz[N],cd[N],ans=0x3f3f3f3f,prn;
    bool ins[N];
    struct Ed{
      int nxt,fr,to;
      Ed(int n=0,int f=0,int t=0):nxt(n),fr(f),to(t) {}
    }ed[N<<1];//!!!有可能(%2,一个c连两条边) 
    void add(int x,int y)
    {
      ed[++xnt]=Ed(hd[x],x,y);hd[x]=xnt;
    }
    void tarjan(int cr,int f)
    {
      dfn[cr]=low[cr]=++tim;
      stack[++top]=cr;ins[cr]=1;
      for(int i=hd[cr],v;i;i=ed[i].nxt)
        if(ins[v=ed[i].to])low[cr]=min(low[cr],dfn[v]);//directed edge,don't worry fa
        else if(!dfn[v])tarjan(v,cr),low[cr]=min(low[cr],low[v]);
      if(dfn[cr]==low[cr])
        {
          cnt++;
          while(stack[top]!=cr)col[stack[top]]=cnt,ins[stack[top--]]=0,siz[cnt]++;
          top--;col[cr]=cnt;ins[cr]=0;siz[cnt]++;
        }
    }
    int main()
    {
      scanf("%d%d%d",&n,&m,&h);
      for(int i=1;i<=n;i++)scanf("%d",&a[i]);
      int x,y;
      for(int i=1;i<=m;i++)
        {
          scanf("%d%d",&x,&y);
          if((a[x]+1)%h==a[y])add(x,y);if((a[y]+1)%h==a[x])add(y,x);
        }
      for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i,0);
      for(int i=1,v;i<=xnt;i++)
        if((v=col[ed[i].fr])!=col[ed[i].to])cd[v]++;
      for(int i=1;i<=cnt;i++)
        if(!cd[i]&&siz[i]<ans)ans=siz[i],prn=i;
      printf("%d
    ",ans);
      for(int i=1;i<=n;i++)
        if(col[i]==prn)printf("%d ",i);
      return 0;
    }
  • 相关阅读:
    读写csv文件
    安卓跳转
    求时间精确到秒的数
    航空公司客户价值分析
    利用LM神经网络和决策树去分类
    拉格朗日插值法
    ID3
    K最近邻
    贝叶斯分类
    FilterDispatcher已被标注为过时解决办法
  • 原文地址:https://www.cnblogs.com/Narh/p/9278730.html
Copyright © 2011-2022 走看看