• loj10093 网络协议


    传送门

    分析

    第一问我们不难想出是缩点之后的新图中入度为0的点的个数,对于第二问,我们画一画可以发现最优策略就是对于每一个入度为0的点都有一个出度为0的点连向它,而对于每一个出度为0的点也一定连向一个入度为0的点。所以最终答案即为出度为0的点和入度为0的点的最大值。注意特判缩点后只有一个点的情况。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    vector<int>v[110];
    int dfn[110],low[110],ist[110],belong[110],id[110],od[110],sum,cnt;
    stack<int>a;
    inline void tarjan(int x){
          dfn[x]=low[x]=++cnt;
          a.push(x);
          ist[x]=1;
          for(int i=0;i<v[x].size();i++)
            if(!dfn[v[x][i]]){
              tarjan(v[x][i]);
              low[x]=min(low[x],low[v[x][i]]);
            }else if(ist[v[x][i]]){
              low[x]=min(low[x],dfn[v[x][i]]);
            }
          if(dfn[x]==low[x]){
              sum++;
              while(1){
                int u=a.top();
                a.pop();
                ist[u]=0;
                belong[u]=sum;
                if(u==x)break;
              }
          }
          return;
    }
    int main(){
          int n,m,i,j,k,ans=0,ans2=0,tot=0;
          scanf("%d",&n);
          for(i=1;i<=n;i++){
              scanf("%d",&m);
              while(m){v[i].push_back(m);scanf("%d",&m);}
          }
          for(i=1;i<=n;i++)
            if(!dfn[i])tarjan(i);
          for(i=1;i<=n;i++)
            for(j=0;j<v[i].size();j++)
              if(belong[i]!=belong[v[i][j]])
                id[belong[v[i][j]]]++,od[belong[i]]++;
          for(i=1;i<=sum;i++){
            if(!id[i])ans++;
            if(!od[i])ans2++;
          }
          tot=max(ans,ans2);
          if(sum==1)tot=0;
          printf("%d
    %d
    ",ans,tot);
          return 0;
    }
  • 相关阅读:
    伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra
    不要什么都学-打造自己的差异化价值
    gitlab markdown支持页面内跳转
    技术人员怎样提升对业务的理解
    为什么HDFS的副本数通常选择3?
    MySQL++简单使用记录.md
    log4cpp安装使用
    log4cxx安装使用
    epoll使用总结
    工作方法-scrum+番茄工作法
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9525753.html
Copyright © 2020-2023  润新知