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



全部评论
示例我都看不懂,明明输入了6行消息,为啥输出是4行呢?
点赞 回复 分享
发布于 2023-08-02 13:27 江苏

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务