題解 JSOI2014 歌劇表演

2022-05-07 22:15:20 字數 675 閱讀 5797

我們可以把這些人拆成一些集合, 保證對於乙個集合你只知道這個整體, 而無法分辨出哪一部分是哪些人

起初所有人都在乙個集合中

我們對於每一次操作, 肯定會有一些人屬於同乙個集合

那你就可以從這個集合中分辨出這些人來, 把這些人摳出來重新丟進乙個集合

最後乙個人乙個集合的就可以被分辨出來

#include #include #include #include #include const int n = 100005; 

using namespace std;

int n, m, id[n], a[n], ans[n], cnt = 1;

sets[n];

template < typename t >

inline t read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * w;

}bool cmp(int a, int b)

int main()

}for(int i = 1; i <= n; i++) printf("%d%c", ans[i], i == n ? '\n' : ' ');

return 0;

}

JSOI2014 歌劇表演

傳送門 沒想到吧我半夜切的 這道題應該算是 text 裡面比較簡單的吧。考慮用集合關係來表示分辨關係,具體地說就是我們把所有演員分成若干個集合,滿足同乙個集合內的演員兩兩不能分辨。初始時所有演員位於同乙個集合內。然後對於某次參加了演出的演員,他們可能分別來自不同的集合,那麼這些集合就會有兩類不同的組...

JSOI2014 歌劇表演

我們抽象的認為一些不能互相辨認的人,被分到了乙個集合,每當又有一場演出,就將每個出演的演員扔出集合,再將上次在相同集合的分在同一集合。然後修改被分的集合和被新建立的時間,當集合只有乙個數的時候不可再分。輸出每個演員所在的集合的最後修改時間,僅當該演員所在的集合中只有乙個演員。include incl...

JZOJ3864 JSOI2014 歌劇表演

我們想想乙個人在什麼情況下會被發現 我們給每個數標上乙個識別號,相同的識別號代表這兩個數性質相同無法識別,而當乙個數擁有乙個唯一的識別號時,該數就可以被識別。為了不讓識別號混亂,又要讓區間的數的識別號的相對位置不變,我們每次取1 n中的最大值t,每次區間中若遇到乙個新出現的識別號,我們就用t 1給它...