[線段樹優化建圖最短路 bfs] BZOJ 3073 [Pa2011]Journeys
#include<cstdio> #include<cstdlib> #include<algorithm> #include<set> using namespace std; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=500005; struct edge{ int l,r; int next; }G[10*N]; int inum,head[4*N]; inline void add(int rt,int l,int r,int p){ G[p].l=l; G[p].r=r; G[p].next=head[rt]; head[rt]=p; } int M; inline void Build(int n){ for (M=1;M<n+2;M<<=1); } inline void insert(int s,int t,int a,int b) { for (s+=M-1,t+=M+1;s^t^1;s>>=1,t>>=1) { if (~s&1) add(s^1,a,b,++inum); if ( t&1) add(t^1,a,b,++inum); } } int n,m,P; int dis[N]; int Q[N],l,r; //set<int> Set; //typedef set<int>::iterator ITER; int Stk[N],pnt; int fat[N]; int Fat(int u){ return u==fat[u]?u:fat[u]=Fat(fat[u]); } int main() { int a,b,c,d,u; // ITER it; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); read(m); read(P); Build(n); for (int i=1;i<=m;i++) { read(a); read(b); read(c); read(d); insert(a,b,c,d); insert(c,d,a,b); } l=r=-1; Q[++r]=P; dis[P]=0; // for (int i=1;i<=n;i++) if (i!=P) Set.insert(i); for (int i=1;i<=n+1;i++) fat[i]=i; fat[P]=P+1; while (l<r) { int u=Q[++l]; for (int t=M+u;t;head[t]=0,t>>=1) for (int p=head[t];p;p=G[p].next) { // for (pnt=0,it=Set.lower_bound(G[p].l);it!=Set.end() && *it<=G[p].r;it++) // dis[*it]=dis[u]+1,Q[++r]=*it,Stk[++pnt]=*it; pnt=0; for (int i=Fat(G[p].l);i<=G[p].r;i=Fat(i+1)) dis[i]=dis[u]+1,Q[++r]=i,Stk[++pnt]=i; // while (pnt) Set.erase(Stk[pnt--]); while (pnt) fat[Stk[pnt]]=Stk[pnt]+1,pnt--; } } for (int i=1;i<=n;i++) printf("%d\n",dis[i]); return 0;
相關推薦
[線段樹優化建圖最短路 bfs] BZOJ 3073 [Pa2011]Journeys
#include<cstdio> #include<cstdlib> #include<algorithm> #include<set> using namespace std; inline char nc() {
Codeforces 787D. Legacy 線段樹優化建圖+最短路
self memset site cti worker for each down end rap output standard output Rick and his co-workers have made a new radioactive formula
787D (線段樹優化建圖+最短路)
Legacy Rick and his co-workers have made a new radioactive formula and a lot of bad guys are after them. So Rick wants to give his lega
洛谷3783 SDOI2017 天才黑客(最短路+虛樹+邊轉點+線段樹優化建圖)
題目連結 成功又一次自閉了 怕不是豬國殺之後最自閉的一次 一看到最短路徑。 我們就能推測這應該是個最短路題 現在考慮怎麼建圖 根據題目的意思,我們可以發現,在本題中,邊與邊之間存在一些轉換關係,但是點與點之間並不存在。 那麼我們考慮 邊轉點,點轉邊。 每一條邊拆成
【bzoj4276】[ONTAK2015]Bajtman i Okr?g?y Robin 線段樹優化建圖+費用流
har brush while inf uil mes queue eof div 題目描述 有n個強盜,其中第i個強盜會在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]這麽多段長度為1時間中選出一個時間進行搶劫,並計劃搶走
【BZOJ3681】Arietta 樹鏈剖分+可持久化線段樹優化建圖+網絡流
des 持久化 -s 過程 void 但是 陽光 建圖 == 【BZOJ3681】Arietta Description Arietta 的命運與她的妹妹不同,在她的妹妹已經走進學院的時候,她仍然留在山村中。但是她從未停止過和戀人 Velding 的書信往來。一天,
CF786B Legacy(線段樹優化建圖)
好想 sin flag date ide init 技術 out nbsp 題意 有n個點,q個詢問,每次詢問有一種操作。操作1:u→[l,r](即u到l,l+1,l+2,...,r距離均為w)的距離為w;操作2:[l,r]→u的距離為w;操作3:u到v的距離為w;求起點到
[bzoj5017][Snoi2017]炸彈 tarjan縮點+線段樹優化建圖+拓撲
isp stream 現在 aps data fin zoj tput gre 5017: [Snoi2017]炸彈 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 608 Solved: 190[Submit][Stat
BZOJ5017 [SNOI2017]炸彈 - 線段樹優化建圖+Tarjan
amp col build stx mod ide update 有向圖 style Solution 一個點向一個區間內的所有點連邊, 可以用線段樹優化建圖來優化 : 前置技能傳送門 然後就得到一個有向圖, 一個聯通塊內的炸彈可以互相引爆, 所以進行縮點變成$DAG$
【網路流+線段樹優化建圖】CF793G Oleg and chess
【題目】 原題地址 有一個 n × n
[CERC2017]Intrinsic Interval[scc+線段樹優化建圖]
題意 給定一個長度為 \(n\) 的排列,有 \(q\) 次詢問,每次詢問一個區間 \([l,r]\) ,找到最小的包含 \([l,r]\) 的區間,滿足這個區間包含了一段連續的數字。 \(n\leq 10^5\) 分析 考慮相鄰的兩個位置 \(i,i+1\),記兩個位置的值為 $ x ,y(x
codeforces 787D - Legacy 線段樹優化建圖,最短路
題意: 有n個點,q個詢問, 每次詢問有一種操作。 操作1:u→[l,r](即u到l,l+1,l+2,...,r距離均為w)的距離為w; 操作2:[l,r]→u的距離為w 操作3:u到v的距離為w 最終求起點到其他點的最短距離,到達不了輸出-1 題解 線段樹優化建圖+最短路..
bzoj4383 [POI2015]Pustynia(線段樹優化建圖+拓撲序dp)
首先我們有樸素的想法,直接建圖拓撲序,倒著dp求每個點的最小值即可。 然而這樣建邊可能是O(n2)的 我們考慮對於一條資訊,我們新建一個節點p,大於的點我們向p連一條邊權為1的邊,小於的點p向它連一條邊權為0的邊。這樣就好多了,然而最壞還是O(n2)的囧
【線段樹優化建圖+費用流Spfa增廣】BZOJ4276(ONTAK2015)[Bajtman i Okrągły Robin]題解
題目概述 有n個強盜,第i個強盜將在[Li,Ri]內選一段長度為1的時間盜竊ci元,每個長度為1的時間只能阻止一個強盜,求最大能挽回的損失。 解題報告 這是分配型別的題目,考慮最大費用最大流。 先將超級源S與每一個強盜i建容量為1,費用為ci的邊。然
【bzoj 3073】Journeys(線段樹優化建圖)
傳送門biu~ 線段樹的每個節點代表一個區間,建兩棵線段樹。 出線段樹每個點向父節點連邊0,表示如果能從這個區間出發也就可以從父區間出發。入線段樹每個點向子節點連邊0,表示如果能到達這個區間也就可以到達子區間。 入線段樹每個點向出線段樹的平行結點連邊0,
CF-787D-線段樹建圖+最短路
http://codeforces.com/problemset/problem/787/D 題目大意是給出一個有向圖,有N個節點,初始節點在S,詢問S到所有點最短路。邊的讀入方式有三種, 1 u v w 表示 u->v有一條邊權為w的邊, 2 v l r w
codeforces 786B Legacy 線段樹建圖最短路
B. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Rick and
786B Legacy (線段樹建圖+最短路)
B. Legacy time limit per test 2 seconds memory limit per test256 megabytes inputstandard inputoutputstandard output Rick and his co-wor
[bzoj3073][Pa2011]Journeys 線段樹優化建邊的最短路
#include <bits/stdc++.h> #define pa pair<int,int> using namespace std; const int N = 30000005; int n, m, S, cnt, vir, last[5000000], dis[500000
POJ1122_FDNY to the Rescue!(逆向建圖+最短路樹)
name map ted 技術分享 ext nod 技術 desc guarantee FDNY to the Rescue! Time Limit: 1000MS Memory Limit: 10000K Total Sub