博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
How Many Tables HDOJ
阅读量:6760 次
发布时间:2019-06-26

本文共 2654 字,大约阅读时间需要 8 分钟。

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 52483    Accepted Submission(s): 26049

 

Problem Description
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strangers.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
 

 

Input
The input starts with an integer T(1<=T<=25) which indicate the number of test cases. Then T test cases follow. Each test case starts with two integers N and M(1<=N,M<=1000). N indicates the number of friends, the friends are marked from 1 to N. Then M lines follow. Each line consists of two integers A and B(A!=B), that means friend A and friend B know each other. There will be a blank line between two cases.
 

Output
For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.
 

Sample Input
2 5 3 1 2 2 3 4 5 5 1 2 5
 

Sample Output
2 4
 
  典型的并查集题目,将树结构搞好以后就能得到tables
Accept
//    并查集import java.util.Scanner;public class Main{        static int T;    static int tree[];    static int n;    static int m;        public static int findFather(int node){        if(node!=tree[node]){            return tree[node]=findFather(tree[node]);        }        return node;    }        public static void main(String args[]){                Scanner reader=new Scanner(System.in);        T=reader.nextInt();        while(T>=1){            n=reader.nextInt();            m=reader.nextInt();            tree=new int[n+1];                        for(int i=1;i<=n;i++){                tree[i]=i;            }            int max=n;            for(int i=1;i<=m;i++){                int one=reader.nextInt();                int two=reader.nextInt();                int oneFather=findFather(one);                int twoFather=findFather(two);                if(oneFather!=twoFather){    //父结点不同                    if(oneFather>twoFather){    //指向更大的结点                        tree[twoFather]=oneFather;                    }else{                        tree[oneFather]=twoFather;                    }                    max--;                }            }                        System.out.println(max);            T--;        }    }    }

 

转载于:https://www.cnblogs.com/chiweiming/p/10704065.html

你可能感兴趣的文章
学城项目知识点整理及源码
查看>>
sqlServer,oracle中case关键字的用法
查看>>
表驱动法之保险费率
查看>>
苹果硅胶套市场空间上百亿:合作厂商利润达30%
查看>>
娇俏2011年春装
查看>>
备份还原oracle数据库
查看>>
[转载] AUML——FIPA Modeling Technical Committee
查看>>
Samba Server Configuration - Simple
查看>>
【ZZ】大型数据库应用解决方案总结 | 菜鸟教程
查看>>
Apr. 2th
查看>>
栅格那点儿事(四D)
查看>>
反向代理服务器的工作原理(转)
查看>>
MVC前后台获取Action、Controller、ID名方法 以及 路由规则
查看>>
fnb2b分支拉取注意事项
查看>>
电脑上没有iis组件,怎么才能安装iis?
查看>>
项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框
查看>>
迁移学习(训练数据少的可怜时的办法)
查看>>
Codeforces 798A - Mike and palindrome
查看>>
Chapter 6、字符串(二)(1st,Mar.)
查看>>
4-3 求链式表的表长 (10分)
查看>>