思路:
肯定是要列舉斷點的。。就看列舉完斷點以後怎麼處理了……
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...