• $Luogu$ $P1955$ $[NOI2015]$ 程序自动分析


    链接

    背景

    (CCF) (NOI) (2015) (Day1) (T1)(Luogu) (P1955/LOJ2129)

    题意

    给定 (T) 组数据。每组数据有 (n) 个关系给出,形如 ((a,b,c)) 表示变量 (x_a) 和变量 (x_b) 相等( (c=1) )或不等( (c=0) )。判断这些关系能否同时成立。

    解法

    考虑关系的传递性。等号显然具有传递性,而不等号则不具有。于是考虑把所有相等的变量合并到同一个集合里,如果一个不等关系的两个变量在同一个集合里,则不合法。若所有不等关系都合法,所有的关系就都合法。

    (trick)

    考虑关系的传递性。并查集最擅长的就是动态维护这个玩意儿。

    细节

    由于 (a,b leqslant 10^9) ,要先把所有坐标离散化再做并查集,否则空间开不下。

    代码

    $View$ $Code$ ```cpp #include using namespace std; inline int read() { int ret=0,f=1; char ch=getchar(); while(ch>'9'||ch<'0') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { ret=(ret<<1)+(ret<<3)+ch-'0'; ch=getchar(); } return ret*f; } int T,n,m,a[2000005],b[2000005],fa[2000005]; bool flag; struct Relationship { int x,y,v; }re[1000005]; inline bool cmp(Relationship a,Relationship b) { return b.v
  • 相关阅读:
    [循环卷积]总结
    [FFT/NTT/MTT]总结
    [BZOJ 4870] 组合数问题
    [BZOJ 4809] 相逢是问候
    [BZOJ 4591] 超能粒子炮-改
    __getattribute__
    __repr__
    __reduce__
    数据库查询转excel小工具
    Git常用操作
  • 原文地址:https://www.cnblogs.com/Peter0701/p/11808410.html
Copyright © 2020-2023  润新知