zoukankan      html  css  js  c++  java
  • SSLZYC 2344 刻录光盘

    题目大意:
    这里写图片描述


    思路:

    这道题是求一个图的强联通分量。

    先用floyed求出一个人最终可以想谁借到光盘,再利用一个很类似并查集的东西求出答案


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int father[201],a[201][201],n,x,sum;
    
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            while(x!=0)
            {
                a[i][x]=1;
                scanf("%d",&x);
            }
        }
        for (int k=1;k<=n;k++)
         for (int i=1;i<=n;i++) 
          for (int j=1;j<=n;j++)  //floyed
           if (a[i][k]==1&&a[k][j]==1) a[i][j]=1;
        for (int i=1;i<=n;i++)
         father[i]=i;  //并查集初始化
        for (int i=1;i<=n;i++)
         for (int j=1;j<=n;j++)
          if (a[i][j]==1) father[j]=father[i];  //如果i肯把光盘给j,那么j的父节点就是i的父节点(i)
        for (int i=1;i<=n;i++)
         if (father[i]==i) sum++;  //记录有几个人的父节点是自己(即必须给光盘的人)
        printf("%d\n",sum);
        return 0;
    }
  • 相关阅读:
    zabbix迁移思路
    top命令
    random随机数
    判断传入元素是否可见
    title_contains
    1.Selenium的工作原理以及网页上查找元素
    APP升级测试
    英语词汇
    作文 |素材笔记
    408计组 |二、数据的表示和运算
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998886.html
Copyright © 2011-2022 走看看