洛谷P3385 負環與SPFA演算法

2022-09-20 21:48:10 字數 1233 閱讀 2836

spfa演算法:

spfa演算法是圖論中主要應用於解決帶負權圖相關問題的一種演算法,它死了。

時間複雜度:o(ke)//k為平均每個節點入隊次數

演算法思路

1,建立先進先出佇列存放待優化結點;

2,每次去除當前隊首結點u,用u最短路徑估計值將與u相連的結點v進行鬆弛操作,若v最短路徑被更新且v不在佇列中,將v加入隊尾;

(鬆弛操作:對,每個集合中的節點v,都設定dis[v]表示起點與v間最短路徑權值的上界的操作

3,重複上述操作直至隊列為空。

於是板子題又雙叒叕應運而生:

1 #include2

#define ff(i,s,e) for(int i=s;i<=e;i++)

3#define fff(i,s,e) for(int i=s;i>=e;i--)

4using

namespace

std;

5 inline int

read()

9while(ch>='

0'&&ch<='9')

10return x*f;11}

12const

int n=2010,m=3010,inf=0x3f3f3f3f;13

intn,m;

14int

tal,head[n];

15int

dis[n];

16int mark[n];//

元素i被標記過幾次

17bool vis[n];//

元素i是否在佇列中

18struct

qwqa[m*2

];21 queueq;

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

28bool

spf()

44if(mark[v]>=n) return

1;//

判斷負環,可由鬆弛原理推導 45}

46}47}

48return0;

49}50int

main()

61if(spf()) printf("

yes\n");

62else printf("

no\n");

63}64return0;

65 }

阿巴阿巴

洛谷 P3385 負環

聽說這道題有好幾種做法?超神搜尋?bfs?spfa?奇怪的貪心?管理員更新了資料,別想了qwq.可能是我太菜了,想不出吧.說說我的解法 我們就做普通的spfa,不要加什麼酸辣粉slf優化,會超時 判斷每個點進佇列的的次數,如果次數超過了n次,說明存在負環.證明,自己想一想也許就可以了吧,如果乙個點多...

模板 SPFA判負環(洛谷P3385)

給定乙個n個點m條邊有向圖,每條邊有乙個權值,試判斷圖中是否存在負環。第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,表示a b有一條權值為w的邊 若w 0則為單向,否則雙向 共t行。對於每組資料,存在負環則輸出一行...

洛谷 P3385 模板 負環

暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,表示a b有一條權值為w的邊 若w 0則為單向,否則雙向 輸出格式 共t行。對於每組資料,...