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"); } } } } } // 满分