poj1733 帶權並查集 map

2021-07-03 21:47:34 字數 920 閱讀 5736

開始看題目姿勢不對,然後發現是n的長度是1000000000不是串的長度,又發現輸出是最多符合前幾項

這類區間並查集都維護乙個權值終於感覺理解了,左區間需要-1

由於陣列開不下,但詢問只有5000條就可以用map存,hash不會。。。還是re因為初始化的時候不是for(i,1,n)是for(i,1,5000)

#include #include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define mod 1000000007

int f[5050];

int v[5050];

char x[10];

int find(int x)

bool unionset(int a,int b,int x)

f[bb]=aa;

v[bb]=(v[a]+x-v[b]+2)%2;

return true;

}int main()

int a,b,op;

int flag=0;

int cnt=0;

for(int i=1;i<=m;i++)

if(mp.find(b)==mp.end())

if(x[0]=='e')

op=0;

else op=1;

if(unionset(mp[a],mp[b],op)==false)

flag=1;

if(flag==0&&unionset(mp[a],mp[b],op)==true)

ans++;

}printf("%d\n",ans);

}return 0;

}

poj 1733 帶權並查集 離散化

思路 這題一看就想到要用並查集做了,不過一看資料這麼大,感覺有點棘手,其實,我們仔細一想可以發現,我們需要記錄的是出現過的節點到根節點的1個奇偶性,這與區間端點的大小並沒有關係,於是想到我們可以用map對映即可,這樣就解決了大資料了。此外,如果0表示出現偶數個1,1表示出現奇數個1,然後就是向量偏移...

poj1733 離散化 帶權並查集的思考

題意是給你乙個區間和區間1的個數是偶數還是奇數 然後判斷第乙個錯提問的 第一眼看到這題感覺是線段樹 思考一下線段樹的做法 線段樹維護區間資訊 維護乙個區間是奇數還是偶數 線段樹乙個節點代表乙個區間 但是乙個區間並不代表乙個節點 要多個節點儲存乙個資訊 多個交叉區間維護的話 就亂掉了 而且一般線段樹題...

poj 1733 map 帶權並查集 輸入坑點

題意 只由0或1組成的長度為len的序列,先給出n個資訊,當給出第k個資訊與前k 1衝突的時候,認為有k 1個正確的資訊,假如全部不衝突,那麼有n個正確的資訊。資訊樣式為 1 2 even 表示第1個數字到第2個數字共有偶數個1,若是1 2 odd表示有奇數個1。資料範圍 len 1e9 n 5e3...