We Are A Team
标题:We Are A Team | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限
总共有n个人在机房,每个人有一个标号(1 <= 标号 <=n),他们分成了多个团队,需要你根据收到的m条消息判定指定的两个人是否在一个团队中,具体的:
1、消息构成为:a b c,整数a、b分别代表了两个人的标号,整数c代表指令。
2、c==0代表a和b在一个团队内。
3、c==1代表需要判定a和b的关系,如果a和b是一个团队,输出一行“we are a team”,如果不是,输出一行“we are not a team”。
1、消息构成为:a b c,整数a、b分别代表了两个人的标号,整数c代表指令。
2、c==0代表a和b在一个团队内。
3、c==1代表需要判定a和b的关系,如果a和b是一个团队,输出一行“we are a team”,如果不是,输出一行“we are not a team”。
4、c为其它值,或当前行a或b超出1~n的范围,输出“da pian zi”。
#coding=utf-8
import sys
if __name__ == "__main__":
# 读取第一行的n
line = sys.stdin.readline().strip()
values = list(map(int, line.split()))
n = values[0]
m = values[1]
if n < 1&nbs***bsp;m > 100000:
print("NULL")
else:
l = []
team = []
for i in range(m):
# 读取每一行
line = sys.stdin.readline().strip()
# 把每一行的数字分隔后转化成int列表
values = list(map(int, line.split()))
a = values[0]
b = values[1]
c = values[2]
if (a > n&nbs***bsp;b > n):
print("da pian zi")
elif c == 0:
flag = True
for i in team:
if i.count(a) + i.count(b) > 0:
flag = False
if i.count(a)== 0:
i.append(a)
else:
i.append(b)
if flag:
new = []
new.append(a)
new.append(b)
team.append(new)
elif c == 1:
flag = False
for i in team:
if i.count(a) + i.count(b) > 1:
flag = True
if flag:
print("we are a team")
else:
print("we are not a team")
else:
print("da pian zi")
import java.util.*;
public class Main {
public static void merge(HashMap<Integer, Integer> map, int n, int m, int flag) {
// 合并 n、m 团队
for (Integer key : map.keySet()) {
if (map.get(key) == n || (map.get(key) == m)) {
map.put(key, flag);
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int flag = 0; // 团队编号
HashMap<Integer, Integer> map = new HashMap<>(); // 记录每个人所属的团队
int n = in.nextInt(); // 人数
int m = in.nextInt(); // 消息
if (n < 1 || n > 100000 || m < 1 || m > 100000) {
System.out.println("NULL");
break;
}
while (m > 0) {
m--;
int a1 = in.nextInt();
int a2 = in.nextInt();
int ops = in.nextInt();
if (a1 < 1 || a1 > n || a2 < 1 || a2 > n) {
System.out.println("da pian zi");
continue;
}
if (ops == 0) { // 分三种情况,1、都没有团队 2、有一个人有团队 3、都有团队
if (!map.containsKey(a1) && !map.containsKey(a2)) {
flag++;
map.put(a1, flag);
map.put(a2, flag);
}else if (map.containsKey(a1) && map.containsKey(a2)) {
flag++;
if (map.get(a1) != map.get(a2)) {
merge(map, map.get(a1), map.get(a2), flag);
}
} else if (map.containsKey(a1)) {
map.put(a2, map.get(a1));
} else if (map.containsKey(a2)) {
map.put(a1, map.get(a2));
}
} else if (ops == 1) { // 只有map有数据才能确定两人是否同一个团队的
if (map.containsKey(a1) && map.containsKey(a2)) {
if (map.get(a1) == map.get(a2)) {
System.out.println("we are a team");
} else {
System.out.println("we are not a team");
}
} else { // 不确定的事情为啥也要输出?有可能是一个团队
System.out.println("we are not a team");
}
} else {
System.out.println("da pian zi");
}
}
}
}
}
// 满分
