zoukankan      html  css  js  c++  java
  • NOI 2015 T1 等式

    我有 n 个式子

    对于每个式子,要么是 xi = xj 的形式,要么是 xi <> xj 的形式。

    现在我给出这 n 个式子,你要告诉我,这 n 个式子是否可能同时成立。

    【输入格式】

    每个测试点有多组测试数据。

    第一组有一个个整数 T ,表示测试数据的组数。

    对于每一组组测试数据,第一行包含一个个正整数 n,表示式子的数目。

    接下来 n 行,每行三个整数 i,j,e,描述n个式子。如果 e = 1,则这个式子

    为 xi = xj 。如果 e = 0,则这个式⼦是 xi ̸= xj 。

    【输出格式】

    对于每组个测试数据输出。如果存在一种方案,使得所有的式子都被满足,

    输出“YES”(不包含引号)。否则输出“NO”(不包含引号)。

     

     

    样例输入 1

     

    2

    2

    121

    120

    2

    121

    211

     

     

    样例输出 1

     

    NO

    YES

     

    样例输入 2 

    2

    3

    121

    231

    311

    4

    121

    231

    341

    140

    样例输出 2

    YES

    NO

    【数据范围】

    对于 20% 的数据,n ≤ 10。

    对于 40% 的数据,n ≤ 100。

    对于 70% 的数据,n ≤ 105,1 ≤ i, j ≤ 104。

    对于 100% 的数据,n ≤ 105,1 ≤ i, j ≤ 109,1 ≤ t ≤ 10。

     【解题思路】

    这是一道比较水的NOI的题目,主要是并查集的应用,先排序,把等式放在一个并查集中,再去检查不等式,如有不满足,则输出'NO',全部满足输出'YES'。

    单纯的并查集可以得90分,离散化之后就可以得满分(很显然,我并不会写)

     1 type eqq=record
     2 l,r:Longint;
     3 end;
     4 var
     5 eq,neq:array[0..100000] of eqq;
     6 ro:array[0..100000] of longint;
     7 sum,sum1,sum2,d,b,c,i,j,flag,t,n,w,max:Longint;
     8 function root(x:Longint):Longint;
     9 begin
    10     if x=ro[x] then exit(x);
    11     root:=root(ro[x]);
    12     ro[x]:=root;
    13     exit(root);
    14 end;
    15 
    16 procedure union(x,y:Longint);
    17 begin
    18     ro[root(x)]:=root(y);
    19 end;
    20 
    21 begin
    22     assign(input,'prog.in');  reset(input);
    23     assign(output,'prog.ans'); rewrite(output);
    24     read(t);
    25     for w:=1 to t do
    26     begin
    27         sum1:=0; sum2:=0; sum:=0;flag:=0; max:=0;
    28         read(n);
    29         for i:=1 to n do
    30         begin
    31             read(d,b,c);
    32             if d>max then max:=d;
    33             if b>max then max:=b;
    34             if c=1 then
    35             begin
    36                 inc(sum1);
    37                 eq[sum1].l:=d;
    38                 eq[sum1].r:=b;
    39             end;
    40             if c<>1 then
    41             begin
    42                 inc(sum2);
    43                 neq[sum2].l:=d;
    44                 neq[sum2].r:=b;
    45             end;
    46          end;
    47          for i:=1 to max do ro[i]:=i;
    48          for i:=1 to sum1 do
    49          if root(eq[i].l)<>root(eq[i].r) then union(eq[i].l,eq[i].r);
    50          for i:=1 to sum2 do
    51          begin
    52             if root(neq[i].l)<>root(neq[i].r) then continue
    53             else
    54             begin
    55                 flag:=1;
    56                 break;
    57             end;
    58          end;
    59          if flag=1 then writeln('NO') else writeln('YES');
    60     end;
    61     close(input); close(output);
    62 end.
  • 相关阅读:
    《CoderXiaoban》第八次团队作业:Alpha冲刺5
    《CoderXiaoban》第八次团队作业:Alpha冲刺4
    《CoderXiaoban》第八次团队作业:Alpha冲刺 3
    《CoderXiaoban》第八次团队作业:Alpha冲刺 2
    《CoderXiaoban》第八次团队作业:Alpha冲刺1
    毛毛虫组【Beta】Scrum Meeting 3
    毛毛虫组【Beta】Scrum Meeting 2
    毛毛虫组【Beta】Scrum Meeting 1
    《毛毛虫团队》第九次团队作业:BETA冲刺与团队项目验收
    《毛毛虫组》【Alpha】Scrum meeting 5
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4745050.html
Copyright © 2011-2022 走看看