题意:对于一个朋友圈,一个圈内所有的人都是朋友,所以是一个完全无向图,如果是输出“YES”,不是输出“NO”
思路:将给出的两个是朋友放在一个数组,并用一个List集合装下n个List,然后按序号装下每个人的朋友,判断一个人的朋友是否是他朋友的朋友,如果都有则将这个朋友标记,不是则退出输出“NO”
AC代码:
import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
public class Main{
public static void main(String[] args) {
//System.out.println(111);
//System.out.println(000);
Scanner sc=new Scanner (System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int a[][]=new int [2*m][2];
for(int i=0;i<m;i++) {
a[i][0]=sc.nextInt();
a[i][1]=sc.nextInt();
a[i+m][0]=a[i][1];
a[i+m][1]=a[i][0];
}
List<ArrayList<Integer>> l=new ArrayList<>();
for(int i=0;i<=n;i++) {
List<Integer>list=new ArrayList<>();
l.add((ArrayList<Integer>) list);
}
for(int i=0;i<2*m;i++) {
l.get(a[i][0]).add(a[i][1]);
}
boolean arr[]=new boolean [n+1];
boolean b=true;
for(int i=0;i<=n;i++) {
if(!arr[i]) {
for(int j=0;j<l.get(i).size();j++) {//找到对应的东西,判断是否相等
if(l.get(i).size()==l.get(l.get(i).get(j)).size()) {
for(int x=0;x<l.get(l.get(i).get(j)).size();x++) {
if(l.get(l.get(i).get(j)).get(x)!=i) {
if(!l.get(i).contains(l.get(l.get(i).get(j)).get(x))) {
b=false;
break;
}
}
}
if(!b)break;
arr[l.get(i).get(j)]=true;
}else {
b=false;
break;
}
}
}
if(!b) {
b=false;
break;
}
}
if(b)System.out.println("YES");
else System.out.println("NO");
}
}