zoukankan      html  css  js  c++  java
  • HDU 3357

    http://acm.hdu.edu.cn/showproblem.php?pid=3357

    给出公司间的控股关系,问有多少组不合法数据,自己控股自己不合法,a控股b,b控股c,则a控股c

    其实就是找环,加一条边如果出现环ans++,但是每次搜一遍有没有环会tle。此处用邻接矩阵处理,如果a要控股b,则控股a的公司都控股b,并且a控股的公司都被控股a的控股。对于b的分析同理,此题有大量重复数据,需要去掉

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    #include <algorithm>
    #include <queue>
    #include <cmath>
    #include <stack>
    #include <set>
    
    using namespace std;
    
    int mp[300][300];
    int n;
    
    void add(int a,int b){
        mp[a][b]=1;
        for(int i=1;i<=n;i++)
            if(mp[i][a]){
                mp[i][b]=1;
                for(int j=1;j<=n;j++)
                    if(mp[a][j])
                        mp[i][j]=1;
            }
        for(int i=1;i<=n;i++)
            if(mp[b][i]){
                mp[a][i]=1;
                for(int j=1;j<=n;j++)
                    if(mp[j][b])
                        mp[j][i]=1;
            }
    }
    
    int main(){
        int t;
        int cas=1;
        while(~scanf("%d%d",&n,&t)){
            if(!n && !t)break;
            memset(mp,0,sizeof(mp));
            int ans=0;
            while(t--){
                int a,b;
                scanf("%d%d",&a,&b);    
                if(mp[b][a])ans++;
                else if(a==b)ans++;
                else if(!mp[a][b]) add(a,b);//关键,去除重复边,直接else会TLE 
            }
            printf("%d. %d
    ",cas++,ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    骑士飞行棋 C#代码详解
    C#中的static静态变量的用法
    Break和Continue的一些注意事项
    枚举类型
    html 01-认识Web和Web标准
    css 17-CSS3的常见边框汇总
    css 16-浏览器的兼容性问题
    css 15-Sass入门
    css 14-CSS3属性详解:Web字体
    css 13-CSS3属性:Flex布局图文详解
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/4133522.html
Copyright © 2011-2022 走看看