洛谷p2176 最短路

2021-09-19 04:38:24 字數 1158 閱讀 8331

題意: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到...