题目描述
输入
包含多组测试用例。
对于每组测试用例:
第一行包括2个整数,N(1 <= N <= 1000),M(0 <= M <= N*(N-1)/2),代表现有N个人(用1~N编号)和M组关系;
在接下来的M行里,每行包括3个整数,a,b, c,如果c为1,则代表a跟b是同乡;如果c为0,则代表a跟b不是同乡;
已知1表示小赛本人。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (true){
String line=scanner.nextLine();
int m=Integer.parseInt(line.split(" ")[1]);
getPerson(stringToGroups(m,scanner));
}
}
public static void getPerson(String[][]groups){
List<String> laoxiang=new ArrayList<>();
laoxiang.add("1");
int m=groups.length;
List<Integer> checkRepeat=new ArrayList<>();
//行数的取取值需要遍历两次 从大到小 从小到大
for(int i=0;i<2*m;i++){
int index=i>=m?(2*m-i-1):i;
System.out.println(index);
//从下面往回遍历的时候 把是老乡的重复行去除 只看不是老乡的会不会成为老乡
if (checkRepeat.contains(index)) {
continue;
}
boolean check=groups[index][2].equals("1");
boolean check2=laoxiang.contains(groups[index][0]);
boolean check3=laoxiang.contains(groups[index][1]);
if(check2&&check){
laoxiang.add(groups[index][1]);
checkRepeat.add(index);
}
if(check3&&check){
laoxiang.add(groups[index][0]);
checkRepeat.add(index);
}
}
System.out.println(laoxiang.size()-1);
}
public static String[][] stringToGroups(int m,Scanner scanner){
String[][]groups=new String[m][3];
for(int i=0;i<m;i++){
String[]group=scanner.nextLine().split(" ");
for(int j=0;j<group.length;j++){
groups[i][j]=group[j];
}
}
return groups;
}
}
版权声明:本文为weixin_50088096原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。