• 团体程序设计天梯赛-练习集L2-010. 排座位


    L2-010. 排座位

    时间限制
    150 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

    输入格式:

    输入第一行给出3个正整数:N(<= 100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:“宾客1 宾客2 关系”,其中“关系”为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。

    这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。

    输出格式:

    对每个查询输出一行结果:如果两位宾客之间是朋友,且没有敌对关系,则输出“No problem”;如果他们之间并不是朋友,但也不敌对,则输出“OK”;如果他们之间有敌对,然而也有共同的朋友,则输出“OK but...”;如果他们之间只有敌对关系,则输出“No way”。

    输入样例:
    7 8 4
    5 6 1
    2 7 -1
    1 3 1
    3 4 1
    6 7 -1
    1 2 1
    1 4 1
    2 3 -1
    3 4
    5 7
    2 3
    7 2
    
    输出样例:
    No problem
    OK
    OK but...
    No way
    思路:朋友关系用并查集,敌对关系用二维数组
     1 #include<bots/stdc++.h> 
     2 using namespace std;
     3 int fa[105];
     4 int _find(int x)
     5 {
     6     if(x!=fa[x]) fa[x]=_find(fa[x]);
     7     return fa[x];
     8 }
     9 int main()
    10 {
    11    int n,m,k;
    12    int ma[105][105]={0};
    13    scanf("%d%d%d",&n,&m,&k);
    14    for(int i=0;i<=n;i++)
    15     fa[i]=i;
    16    for(int i=1;i<=m;i++)
    17    {
    18        int i1,i2,t;
    19        scanf("%d%d%d",&i1,&i2,&t);
    20        if(t==1)
    21        {
    22            int a=_find(i1);
    23            int b=_find(i2);
    24            if(a==b)
    25              continue;
    26            if(a<b)
    27                fa[b]=a;
    28            else
    29                fa[a]=b;
    30        }
    31        else
    32            ma[i1][i2]=ma[i2][i1]=t;
    33    }
    34    for(int i=0;i<k;i++)
    35    {
    36        int i1,i2;
    37        scanf("%d%d",&i1,&i2);
    38        int a=_find(i1);
    39        int b=_find(i2);
    40        if(a==b&&ma[i1][i2]!=-1)
    41        {
    42            puts("No problem");
    43        }
    44        else if(a==b&&ma[i1][i2]==-1)
    45        {
    46            puts("OK but...");
    47        }
    48        else if(a!=b&&ma[i1][i2]==-1)
    49        {
    50            puts("No way");
    51        }
    52        else
    53          puts("OK");
    54    }
    55 }
    我会一直在
  • 相关阅读:
    打印当前系统内存使用情况
    swagger 相关
    乐观锁
    mybatis-plus
    kt connect
    flyway
    k8s mandatory.yaml & service-nodeport.yaml
    kubernetes的DNS解析,k8s的DNS解析,service DNS解析,在集群内部通过 Service 的域名形式进行互相通信
    k8s中引入外部服务,k8s中引入外部数据源
    docker 访问外部数据库
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/5660010.html
Copyright © 2020-2023  润新知