zoj3261變形並查集

2022-03-16 01:15:27 字數 1249 閱讀 6437

需要變形的並查集,這題錯了好久,一直沒a掉,終於在重寫第三次的時候a了

先儲存資料,把不需要拆分的邊合併,逆向計算,需要拆分時就合併,之前不知道為啥寫搓了,tle好久

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pi acos(-1)

#define ll long long

#define mod 100000000

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

#define min(a,b) a#pragma comment(linker,"/stack:1024000000,1024000000")

using

namespace

std;

const

double g=10.0,eps=1e-9

;const

int n=10000+10,maxn=500+10,inf=40000000

;int

father[n],power[n];

vector

int,int> >vec;

vector

v[n];

stack

s;int find(int

x)void merge(int x,inty)}

intmain()

vec.clear();

scanf("%d

",&m);

for(int i=0;i)

scanf("%d

",&k);

while(k--)

else

}for(int i=0;i)

for(int j=0;j)

if(v[i][j]!=-1

) merge(i,v[i][j]);

for(int i=vec.size()-1;i>=0;i--)

else

merge(vec[i].first,vec[i].second);

}while(!s.empty())

}return0;

}

view code

zoj3261 並查集 略有變形

題意 有n個星球,每個星球有一定的power值,某些星球是直接或間接相連的。當某個星球想求助時會找到相連的裡面的power值最大而且大於自己的乙個星球。先在給定這些power值並給定兩兩相連的資訊,然後又q個操作,destroy a b是刪除a b直接相連的邊 保證存在 query a求向誰求助,如...

逆向並查集(ZOJ 3261)

與並查集不同,給出乙個圖中原有的一些邊,然後給出操作,操作不是向圖中新增邊,而是在已有的邊上,將邊刪除。對於該種情況,需要把首先讀入所有操作,把要求刪除的邊全部刪除,再按照從後往前的順序處理操作,這樣刪邊操作又重新轉化為了添邊的操作。例題 zoj3261 connections in galaxy ...

zoj 3261 逆向並查集

很明顯是逆向的並查集,建立邊再銷毀,思路也很巧妙的逆向思考 如果正著一一銷毀,相當於倒著一一建邊。所以儲存q次提問,最後倒著來一一建邊。在此之前先把沒有銷毀的邊全部建好 細節power能量注意一下 view code 1 include 2 include 3 include 4 include 5...