題意:n個點,m條路,如果使某條道路長度翻倍,求此時最短路與未改變前的最短路的差的最大值。
思路:先求一邊最短路,並記錄路徑。然後回溯路徑,改變這條最短路的路徑上的道路長度,計算並比較出最大的差值。
之所以只改變最短路上的值,是因為哪怕改變了別的道路的長度,最短路的值不會改變,是無效的改變。
**待優化
#include #include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
#define ll long long
using namespace std;
const int maxn=10010;
priority_queue,vector>,greater> >q;
//priority_queue**優先佇列**
//其中type 為資料型別,container為儲存資料的容器,functional 為元素比較方式
struct node
add;
vectorg[110];
void addedge(int u,int v,int w)
struct node
d[110];
int vis[110];
int n,m,h,ans,c_1,c_2,dis[110],pre[110],last;
void pri(int i)
int main()
memset(d,inf,sizeof(d));
d[1].from=0;
d[1].val=0;
q.push(make_pair(0,1));
while(!q.empty())}}
pri(n);
last=1;
for(int i=1; i<=h; i++)}}
if(dis[n]-d[n].val>ans)
g[last][c_1].val>>=1;
g[pre[i]][c_2].val>>=1;
last=pre[i];
}printf("%d\n",ans);
}
洛谷P1144 最短路計數 最短路
求乙個無向無權圖的1號點到每個點最短路的個數。一開始看到這道題真的蒙了。現在看回來才發現十分簡單。其實就是乙個spfa的模板。但是為了 計數 可以開乙個記錄答案的陣列sum sumsu m,那麼如果又找到一條從點1到點i ii最短路,就用sum i sum i sum i 加上s um u sum ...
洛谷P1144 最短路計數 最短路
求乙個無向無權圖的1號點到每個點最短路的個數。一開始看到這道題真的蒙了。現在看回來才發現十分簡單。其實就是乙個spfa的模板。但是為了 計數 可以開乙個記錄答案的陣列sum sum,那麼如果又找到一條從點1到點i i最短路,就用sum i s um i 加上sum u s um u uu表示從那個點...
洛谷 P2384 最短路
p2384 最短路 題目提供者bosh 標籤圖論 最短路難度普及 提高 狗哥做爛了最短路,突然機智的考了bosh一道,沒想到把bosh考住了 你能幫bosh解決嗎?他會給你100000000000000000000000000000000000 10金幣w 題目描述 給定n個點的帶權有向圖,求從1到...