zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛-练习集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 }
    我会一直在
  • 相关阅读:
    Android Lock Screen Orientation
    android studio修改新项目package名称
    DevExpress控件GridView挂下拉控件无法对上值
    Datawindow.net+access数据窗口制作方法
    LR11中web_save_timestamp_param
    LR自带网站飞机订票系统 启动
    MySQL ODBC驱动安装和配置数据源
    【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
    【笔记】LR录制方式和常用函数
    【笔记】http1.1支持的7种请求方法
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/5660010.html
Copyright © 2011-2022 走看看