bzoj 2725 故鄉的夢 刪邊最短路

2021-09-08 14:24:46 字數 2142 閱讀 7618

題意:給出乙個帶權無向圖,起點s和終點t。q個詢問。每個詢問詢問刪除某條邊後s到t的最短路。

思路:(1)計算每個點到s和t的最短路;

(2)記錄最短路用到的邊,這些邊構成乙個新圖;

(3)求出新圖上的橋,橋將新圖分成若干連通塊(其實所有的連通塊是線性排列的);

(4)對於刪除的邊若不是新圖中的橋無視;否則,列舉這個橋連線的兩個連通塊的所有邊,並用這些邊(u,v)的權+diss[u]+dist[v]作為排序關鍵字對邊排序,最小的即是答案。

#include #include #include #include #include #include #include #include #include #define max(x,y) ((x)>(y)?(x):(y))

#define min(x,y) ((x)<(y)?(x):(y))

#define abs(x) ((x)>=0?(x):-(x))

#define i64 long long

#define u32 unsigned int

#define u64 unsigned long long

#define clr(x,y) memset(x,y,sizeof(x))

#define pb(x) push_back(x)

#define sz(x) x.size()

#define pi acos(-1.0)

#define sqr(x) ((x)*(x))

using namespace std;

struct node

node(int _v,i64 _dis)

friend bool operator<(node a,node b)

};const i64 inf=((i64)1)<<62;

const int maxn=200005;

const int maxe=1000005;

node edges[maxe];

int head[maxn],begin[maxn],end[maxn],query[maxn],e;

int qu[maxn],qv[maxn];

i64 diss[maxn],dist[maxn],ans[maxn];

int n,m,s,t,visit[maxe];

int shy[maxn<<1],imp[maxn<<1];

int low[maxn],dfn[maxn],id,father[maxn];

int color[maxn],colornum;

int go[maxn],rank[maxn],f[maxe];

priority_queueq;

void init()

void add1(int u,int v,i64 dis)

void dij(int s,i64 dis)}}

}void bfs(int s)}}

}void dfs(int u)

}int tarjan(int u)

}else if(father[u]!=i^1)

}if(low[u]==dfn[u]&&p)

}return p;

}void add2(int u,int v)

void add3(int u,int v)

void add4(int u,int v)

void buildgraph()

}i64 dat(int a)

int cmp(int a,int b)

void solve()

for(j=begin[i];j!=-1;j=edges[j].next)

while(p&&visit[f[1]]) pop_heap(f+1,f+p+1,cmp),p--;

for(j=query[i];j!=-1;j=edges[j].next)

else}}

}int main()

scanf("%d%d%d",&s,&t,&m);

dij(s,diss);

dij(t,dist);

bfs(s);

tarjan(s);

buildgraph();

solve();

for(i=1;i<=m;i++)

}return 0;

}

bzoj 2725 Violet 6 故鄉的夢

無向圖,給定s和t,多次詢問在刪除某條邊時兩點間最短路 我的spfa被卡了 我們對所有不在最短路徑的上的邊 設它的起點為u 終點為v。那麼對於這條邊,包含該邊的最優的s到t路徑就應該是 s s1 u v t1 t 其中s1,t1表示最短路徑上的兩個點。那麼這樣的一條最短路可以再s1 t1中某條邊被刪...

BZOJ 2725 Violet 6 故鄉的夢

題意 給出乙個無向圖,給定起點和終點。給出q個詢問,每個詢問是刪除某條邊之後,起點到終點的最短路變成什麼?詢問之間是獨立的。這道題不錯,但是蒟蒻完全不會做qaq,解法參考claris大佬的。首先容易想到如果刪掉的邊不在最短路上的話,最短路是不會變的。於是我們先跑一遍最短路,找出一條最短路。終點是如果...

2725 HH的項鍊(樹狀陣列)

題目描述 hh有一串由各種漂亮的貝殼組成的項鍊。hh相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答。因為項鍊實在是太長了...