傳送門
沒想到吧我半夜切的
這道題應該算是 \(\text\) 裡面比較簡單的吧。。。
考慮用集合關係來表示分辨關係,具體地說就是我們把所有演員分成若干個集合,滿足同乙個集合內的演員兩兩不能分辨。
初始時所有演員位於同乙個集合內。
然後對於某次參加了演出的演員,他們可能分別來自不同的集合,那麼這些集合就會有兩類不同的組成元素:一種是參加了當前這次演出的,另外一種是沒參加的。
那麼我們就需要把這兩種元素分開,也就是把這個集合拆成兩個。
有解的情況就是乙個演員單成乙個集合。
具體操作可以用 \(\text\) 來實現。
參考**:
#include #include #include #define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class t > inline void read(t& s)
const int _ = 1e5 + 5;
int n, m, a[_], tot, id[_], ans[_];
set < int > s[_];
inline int cmp(const int& i, const int& j)
int main()
}for (rg int i = 1; i <= n; ++i) printf("%d%c", ans[i], " \n"[i == n]);
return 0;
}
JSOI2014 歌劇表演
我們抽象的認為一些不能互相辨認的人,被分到了乙個集合,每當又有一場演出,就將每個出演的演員扔出集合,再將上次在相同集合的分在同一集合。然後修改被分的集合和被新建立的時間,當集合只有乙個數的時候不可再分。輸出每個演員所在的集合的最後修改時間,僅當該演員所在的集合中只有乙個演員。include incl...
題解 JSOI2014 歌劇表演
我們可以把這些人拆成一些集合,保證對於乙個集合你只知道這個整體,而無法分辨出哪一部分是哪些人 起初所有人都在乙個集合中 我們對於每一次操作,肯定會有一些人屬於同乙個集合 那你就可以從這個集合中分辨出這些人來,把這些人摳出來重新丟進乙個集合 最後乙個人乙個集合的就可以被分辨出來 include inc...
JZOJ3864 JSOI2014 歌劇表演
我們想想乙個人在什麼情況下會被發現 我們給每個數標上乙個識別號,相同的識別號代表這兩個數性質相同無法識別,而當乙個數擁有乙個唯一的識別號時,該數就可以被識別。為了不讓識別號混亂,又要讓區間的數的識別號的相對位置不變,我們每次取1 n中的最大值t,每次區間中若遇到乙個新出現的識別號,我們就用t 1給它...