航線規劃 3103

2021-08-09 08:52:33 字數 1977 閱讀 9822

n個星球,m條邊,q個操作。

(1)破壞一條邊;

(2)詢問兩個星球之間的關鍵路徑的條數(即為乙個星球到另乙個星球的必經之路)。

資料範圍:

30%,n<=100,m<=500,q<=100;

60%,n<=10000,m<=30000,q<=20000,資料中沒有刪邊操作;

100%,n<=30000,m<=100000,q<=40000,資料保證任何時候圖都是連通,且沒有重邊和自環;

思路:30暴力,這裡不多說了;

60就有意思了,操作的題目常常是順著進行維護難而倒著來操作會簡單很多。(正難則反)

倒著來時,就是先將要破壞的邊變成加邊,即會出現樹的形狀(不需要解釋了…),60分則隨機生成這顆樹,因為60分沒刪邊。

100其實就多了最小生成樹,但這樣的話,加邊就不單純了,加邊時,當出現環時,那麼這就不是關鍵路徑了,所以就要路徑壓縮一下——並查集。

#include

#define rep(i,f,t) for(int i=(f),i##_end_=(t);i<=i##_end_;i++)

#define drep(i,f,t) for(int i=(f),i##_end_=(t);i>=i##_end_;i--)

#define root 1,n,1

#define lson l,mid,p<<1

#define rson mid+1,r,p<<1|1

#define family tree[p],tree[p<<1],tree[p<<1|1]

#define ll long long

#define inf 0x3f3f3f3f

#define n 100005

#define m 200005

#define s 19

#define w 40005

using

namespace

std;

int n,m,mm,q,t;

int ans[m];

bool vis[n];

int lt[n],rt[n],dfslist[n],d[n];//dfs

int fa[n],fa[s][n];// pcs lca

vector

e[m];//dfs

setes[m];//add edge

struct nodea[m],b[m];

struct treetree[n<<2];

void build(int l,int r,int p)

int mid=(l+r)>>1;

build(lson),build(rson);

}void update(int l,int r,int p)

int mid=(tree[p].l+tree[p].r)>>1;

if(r<=mid)update(l,r,p<<1);

else

if(l>mid)update(l,r,p<<1|1);

else update(lson),update(rson);

}int query(int x,int p)

}tree;

struct lca

void init()

}lca;

struct pcs

void up(int &x)

void addedge(int x,int y)

void init()

}pcs;

void dfs(int x,int f) // find link

dfs(y,x);

}rt[x]=t;

}void rd()

rep(i,1,q)

}void solve()

}void pr()

int main()

小結:

dfs序->找到符合線段樹的一種排列

線段樹查詢+修改

倍增求lca,並查集加邊。

無人機航線規劃

給出無人機的起點0的座標 x0,y0 偵察點的數量n,無人機的航程m,以及各偵察點i的座標 xi,yi 請輸出覆蓋最多偵察點的路徑中航程最短的路徑。若路徑有多個,輸出字典序最大的路徑。計算距離時請保留到小數點後兩位。輸入格式 n mx0 y0 x1 y1 x2 y2 xn yn 對於40 的資料,0...

AHOI2005 航線規劃

點此看題 題意 略 說明 提示 我們保證無論航線如何被破壞,任意時刻任意兩個星球都能夠相互到達。在整個資料中,任意兩個星球之間最多隻可能存在一條直接的航線。資料範圍 1 n 30000,1 m 100000,1 q 40000 1 leq n leq 30000,1 leq m leq 100000...

AHOI2005 航線規劃

給乙個n個點m條邊的圖,有兩種操作 詢問x到y的路徑必經的邊有幾條,刪除x,y之間的直接連邊。1 n 30000,1 m 100000,操作總數不超過40000 我們保證無論航線如何被破壞,任意時刻任意兩個星球都能夠相互到達。在整個資料中,任意兩個星球之間最多隻可能存在一條直接的航線。必經邊就是橋 ...