題意:w×h網格中有n個點,m條邊。每條邊可以從p點花費t時間到乙個矩形中的任意點,求1號點到每個點的最少時間。
\(1<=w,h<=n<=70000,1<=m<=150000\)
時間2s,空間128m。
本題如果放在序列上,使用線段樹建圖,可以做到\(o(mlogn)\)的複雜度,通過資料分治可以獲得72分。
對於二維問題可以想到將線段樹變為二維線段樹,然而會被卡空間。
考慮此題暴力dij的本質:就是每次找最小的點,然後把乙個矩形中大於z的數都改為z,再刪除這個點。
看到矩形修改,可以想到kd樹。
kd樹的空間複雜度是\(o(n)\)的,很優秀。
在矩形修改時,採用類似線段樹的方法:如果當前矩形與修改的矩形沒有交,就直接返回。如果被包含,則直接打標記。
但與線段樹不同的:還需要考慮當前的點是否在矩形內,如果在則直接修改這個點。
這就是kd樹處理矩形的方法。
時間複雜度:\(o(m\sqrt)\)。
刪除乙個點可以打乙個特殊標記實現。
把這個寫上後,會發現超時。
考慮剪枝:如果z大於當前點的標記,就直接返回。
這樣就能過了。
**:
#include #include #define max(a,b) a>b?a:b#define min(a,b) ax-((spx*)b)->x;
}int cmpy(const void*a,const void*b)
int cl[70010],cr[70010],fa[70010],lx[70010],rx[70010],ly[70010],ry[70010];
int zx[70010],wz[70010],qz[70010],ld[70010],inf=2000000000,root;
bool bk[70010];
void update(int x)
void pur(int x,int y)
void pushdown(int x)
void clean(int x)
void del(int x)
int buix(spx sz[70010],int l,int r);
int buiy(spx sz[70010],int l,int r);
void pushup(int rt)
if(cr[rt]!=0)
}bool fugai(int lx,int rx,int ly,int ry,int lx,int rx,int ly,int ry)
bool fenli(int lx,int rx,int ly,int ry,int lx,int rx,int ly,int ry)
int x[70010],y[70010];
int buix(spx sz[70010],int l,int r)
int buiy(spx sz[70010],int l,int r)
void songc(int i,int lx,int rx,int ly,int ry,int z)
pushdown(i);
if(fugai(lx,rx,ly,ry,x[i],x[i],y[i],y[i]))
if(cl[i]!=0)
songc(cl[i],lx,rx,ly,ry,z);
if(cr[i]!=0)
songc(cr[i],lx,rx,ly,ry,z);
update(i);
}void dfs(int u)
int dis[70010];
int fr[70010],ne[150010],x1[150010],x2[150010],y1[150010],y2[150010],w[150010],bs=0;
void addb(int a,int lx,int rx,int ly,int ry,int b)
spx sz[70010];
void dij(int u,int n)
}int main()
{ wz[0]=-1;
int n,m,w,h;
scanf("%d%d%d%d",&n,&m,&w,&h);
for(int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1;i<=n;i++)
fr[i]=ld[i]=-1;
for(int i=0;i
NOI2019 彈跳 區間連邊最短路問題
loj3159 n nn個點,每個點有乙個二維座標,有m mm條邊,每條邊從乙個點出發,可以走到座標範圍在乙個矩形區域內的點,代價為t it i ti 求從1號點到其他點的最短路。n 7 104 m 1.5 1 05 n le7 10 4,m le1.5 10 5 n 7 10 4,m 1.5 10...
NOI2019 序列 題解
同步賽當場降智了,認為貪心是假的。然後。就寫了個暴力。開題一看,這不是模擬費用流嗎?然而這個費用流並不顯然。所以我當時放棄了t3部分分沒想到。當然也希望這個題解能讓大家懂得什麼是真正的模擬費用流啦 大概是這麼一張圖 正確性嘛 就是如果選下標不同的一對數的話必須走 c d 這條路徑 那麼就保證了下標不...
NOI2019模擬2019 3 18 總結
今天的比賽再次打爛了 見識到了自己和外校大佬們的差距 t1一看就感覺不是什麼友善的題 t2感覺是貪心或者dp t3是個類似組合數的遞推,但是直接轉移顯然會t,感覺有可能可以用多項式來做,又想不出來 心態就徹底崩了 推了1ht3的式子,無果,暴力走人。t2又玩了1h,猜了一發結論,搞了個lis之類的東...