NOI2015 程式自動分析

2022-09-07 17:36:20 字數 1378 閱讀 2275

題意:

有一些變數$x_$,給出$n$個形如"$i,j,e$"的約束條件,判斷能否存在乙個$x$的賦值方案滿足所有約束.

$e=0$ 表示$x_=x_$

$e=1$ 表示$x_≠x_$

$n<=10^,i,j<=10^,e=$

題解:

先處理所有$e=0 $的約束,把相等的變數用並查集並起來.

對於$e=1$的約束,如果$i$和$j$在同一集合就無解.

其他情況都有解.

注意

1)下標範圍可能很大,所以進行離散或者雜湊處理.

2)記得給詢問按照$e$排序啊啊啊!!!

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define debug(x) cout<

namespace

std;

inline

void rd(int &res)

inline

void print(int

x)inline

void sc(int

x) print(x);

if(!x)putchar('0'

); putchar('\n

');}inline

void max(int &x,int y)

inline

void min(int &x,int y)

const

int m=2e5+5

;int t=0

,s[m],n,fa[m];

struct

node

}q[m];

intget(int

x)int

main()

sort(q+1,q+1+n);

sort(s,s+t);

t=unique(s,s+t)-s;

for(i=1;i<=t;i++)fa[i]=i;

for(i=1;i<=n;i++)

}if(res)puts("

yes"

);

else puts("no"

); }

return0;

}

view code

$by\ lin452$

$2017.06.07$

NOI 2015 程式自動分析

description 在實現程式自動分析的過程中,常常需要判定一些約束條件是否能被同時滿足。考慮乙個約束滿足問題的簡化版本 假設x1,x2,x3,代表程式中出現的變數,給定n個形如xi xj或xi xj的變數相等 不等的約束條件,請判定是否可以分別為每乙個變數賦予恰當的值,使得上述所有約束條件同時...

NOI 2015 程式自動分析

我覺得是noi史上最簡單的題目了,沒有之一。我們把相等的變數合併起來,然後最後在掃一遍不同的變數是否在乙個塊裡。可能變數很大,離散化一下。uojluogu bzoj cogs include include include using namespace std const int maxm 1e7...

NOI2015 程式自動分析

題解 並查集,因為資料比較大嘛,你要是想再所以如果開1e9的陣列大小,那毫無疑問,基佬紫等著你。所以這個題離散化用了map這個容器。首先,遍歷一遍e 1的時候,把他們之間相等的都給連到同乙個集合裡去,其次再遍歷一遍e 0的時候,看一下當e 0的時候,這兩個是是不是已經在同乙個集合裡面了,如果在乙個集...