題意:給出乙個帶權無向圖,起點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不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答。因為項鍊實在是太長了...