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;
    }
  • 相关阅读:
    python中break与continue区别
    jmeter正则表达式
    python的input()函数与getpass标准库
    python实例练习-01登录
    python数据类型-字符串
    jmeter操作mysql
    jmeter文件下载
    字符逆序
    求解立方根
    求最小公倍数
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998885.html
Copyright © 2011-2022 走看看