POJ 1944 並查集(模擬)

2022-04-30 13:57:17 字數 1444 閱讀 4459

思路:

肯定是要列舉斷點的。。就看列舉完斷點以後怎麼處理了……

1.用類似並查集的思想… f[x]=max(f[x],y)表示x和y相連(一定要注意取max,,,血的教訓) 複雜度o(np)

2.猥瑣思路 每回列舉完斷點以後sort一遍 用左右指標掃一遍就ok..

需要高超的卡時技巧就能過 複雜度:o(nplogp)

// by siriusren

#include

#include

#include

using

namespace

std;

int n,p,ans=0x3fffffff,f[2005];

struct nodenode[10005];

int main()

for(int i=1;imemset(f,0,sizeof(f));

int cnt=0,left=0,right=0;

for(int j=1;j<=p;j++)

f[node[j].x]=max(node[j].y,f[node[j].x]);

for(int j=i;j<=i+n;j++)

if(j>right&&f[j])

cnt+=right-left,left=j,right=f[j];

else

right=max(right,f[j]);

ans=min(ans,cnt+right-left);

for(int j=1;j<=p;j++)

if(node[j].x==i)

swap(node[j].x,node[j].y),node[j].y+=n;

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

}

// by siriusren

#include

#include

using

namespace

std;

int n,p,tot=0,ans=0x3fffffff;

struct node

node[30005];

bool cmp(node x,node y)

int main()

}for(register

int i=1;i1+tot,node+1+tot+p,cmp);

int left=0,right=0,cnt=0;

for(int j=1;j<=p;j++)

else

}cnt+=right-left;

ans=answhile(node[tot+1].x==i)

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

}

vijos1944 琵琶湖(並查集)

題梗 琵琶島被分割為了 n x m 的格仔圖。每一塊格仔區域都有著確定的高度。不幸的是,琵琶湖的水位最近開始 了,第 i 年湖面的高度將 至 i 公尺。另外一方面,琵琶島是由鬆軟的土質形成的,且琵琶湖的湖水可以自由滲入到其中。也就是說,如果有一塊格仔區域的高度不超過當前的水位,則將被淹沒。相連的未被...

並查集 vijos1944琵琶湖

vijos1944 下午除了訂正只做了這題啊。這題我感覺我的xjb演算法已經有點用處了 雖然我不知道別人怎麼搞的,但是我download覺得我的做法很玄 首先,並查集並不支援斷開,所以我們不可能去順序模擬題意 因此倒序 在ti時會有哪些點浮出水面 那首先我們二分出點 x,y 在什麼時刻浮出水面,然後...

POJ並查集小結

並查集小結 並查集大體分為三個 普通的並查集,帶種類的並查集,擴充套件的並查集 主要是必須指定合併時的父子關係,或者統計一些資料,比如此集合內的元素數目。poj 1182 經典的種類並查集 poj 1308 用並查集來判斷一棵樹。注意空樹也是樹,死人也是人。poj 1611 裸地水並查集 poj 1...