P2136 拉近距離

2022-07-12 05:48:10 字數 1476 閱讀 2726

我也想有這樣的愛情故事,可惜我單身

其實這道題就是乙個比較裸的最短路問題。對於乙個三元組 (s,w,t) ,s其實就是乙個端點,而w就是到達的端點,連線兩個端點的邊長為-t,注意要取乙個相反數,這樣才能繼續跑最短路

那麼題意也就這麼看完了,就是很簡單的跑最短路嘛,小明是起點,小紅是終點,小明追小紅就完事了,那麼我們就可以得到第乙份**了

#include using namespace std;

queueshan;

int n,m,s,t,w,ans,tot;

int dis[50010],vis[50010],sum[50010],head[50010];

struct node e[50010];

inline void add(int u,int v,int w)

//標準的鏈式前向星建邊

inline bool spfa()

}} }

return true;

}int main()

if(n==1) //特判1的的情況,然而資料中沒有(還是要保證一下資料的正確性,有點水)

if(spfa()==false) puts("forever love"); //如果有負環,那就幸福地在一起吧 (我也想~~)

else printf("%d",dis[n]); //不行的話就慢慢靠近吧

return 0;

}

然後你就會驚奇地發現你wa了乙個點,在我除錯了許久之後,然後問了問同學,發現這簡直是乙個真正的美好的愛情故事(扯遠了。。)。小明可以追小紅,那小紅為什麼不可以追小明呢(封建思想),所以我們就需要跑兩次最短路,一次是從小明出發,一次是從小紅出發,得出兩者之間最小的答案就可以了

#includeusing namespace std;

const int maxn=1e4+50;

int n,m;

int head[maxn],tot;

struct nodee[maxn];

void add(int u,int v,int w)//還是鏈式前向星建邊

int vis[maxn],d[maxn];

bool v[maxn];

queueq;

bool spfa(int s)

}} }

return true; //千萬別把這步漏掉了,不然預設返回false

}int main()

int ans=20040915; //ans記錄答案

bool kk=spfa(1);

if(kk==false) puts("forever love"); //有負環那就永遠在一起

else {

ans=min(ans,d[n]);

spfa(n);

ans=min(ans,d[1]);

cout《那麼這樣的話,這道題就成功解決了,最後祝大家也早日找到自己喜歡的女生啊,女生就找男生了啊

洛谷 P2136 拉近距離

我是源點,你是終點。我們之間有負權環。小明 在小明和小紅的生活中,有n個關鍵的節點。有m個事件,記為乙個三元組 si,ti,wi 表示從節點si有乙個事件可以轉移到ti,事件的效果就是使他們之間的距離減少wi。這些節點構成了乙個網路,其中節點1和n是特殊的,節點1代表小明,節點n代表小紅,其他代表進...

P2136 拉近距離 題解

題目傳送門 可能更好的閱讀體驗 對於乙個有向圖 g 有 n 個點,m 個邊,把每一條邊用三元組 s i,t i,w i 其中 s i,t i 表示兩個端點,w i 表示這條邊的長度。如果這個圖中從點 1 到點 n 的最短路可以無限縮小,請輸出forever love,否則輸出最短路長度。通過資料範圍...

洛谷P2136 拉近距離(負環判定)

我是源點,你是終點。我們之間有負權環。小明 在小明和小紅的生活中,有 nnn 個關鍵的節點。有 mmm 個事件,記為乙個三元組 si,ti,wi s i,t i,w i si ti wi 表示從節點 sis isi 有乙個事件可以轉移到 tit iti 事件的效果就是使他們之間的距離減少 wiw i...