JSOI2014 歌劇表演

2022-08-18 05:06:14 字數 712 閱讀 6065

我們抽象的認為一些不能互相辨認的人,被分到了乙個集合,每當又有一場演出,就將每個出演的演員扔出集合,再將上次在相同集合的分在同一集合。

然後修改被分的集合和被新建立的時間,當集合只有乙個數的時候不可再分。

輸出每個演員所在的集合的最後修改時間,僅當該演員所在的集合中只有乙個演員。

#include #include #include #include #include #include #include const int maxlongint=2147483647;

const int mo=1000000007;

const int n=100005;

using namespace std;

int fa[n*20],tot,t[n*20],n,m,a[n],bz[n*20],d[n],num,sum[n];

int main()

else

sum[fa[a[j]]]--,fa[a[j]]=bz[fa[a[j]]],sum[fa[a[j]]]++;

}} for(int j=1;j<=num;j++)

bz[d[j]]=0;

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

if(sum[fa[i]]==1)

printf("%d ",t[fa[i]]);

else printf("0 ");

}

JSOI2014 歌劇表演

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

題解 JSOI2014 歌劇表演

我們可以把這些人拆成一些集合,保證對於乙個集合你只知道這個整體,而無法分辨出哪一部分是哪些人 起初所有人都在乙個集合中 我們對於每一次操作,肯定會有一些人屬於同乙個集合 那你就可以從這個集合中分辨出這些人來,把這些人摳出來重新丟進乙個集合 最後乙個人乙個集合的就可以被分辨出來 include inc...

JZOJ3864 JSOI2014 歌劇表演

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