《題解》洛谷P3385 模板 負環

2022-03-03 02:50:32 字數 1224 閱讀 6673

題目鏈結

判斷一張圖中是否存在關於頂點1的負環:

可以用spfa跑一遍,存在負環的情況就是點進隊大於n次

因為在存在負環的情況下,spfa會越跑越小,跑進死迴圈

在最差的情況下,存在的負環長度是「n+1個頂點」這麼長

顯然這是n個點長度,但不是環;

這就是乙個環,n+1個點的長度;

所以**很明了了,只需將一般spfa改動一點飢渴

code:

#include萬能頭,懶得打很多標頭檔案

using

namespace

std;

//資料是騙人的,要開大..

const

int maxn=50001;//

基本的變數或者陣列都是:

queueq;

bool

visited[maxn];

inthead[maxn],cnt,js[maxn],dis[maxn];

struct

ppap edge[maxn];

intt,n,m;

//快讀部分

intread()

while(ch<='

9'&&ch>='0'

)

return !f?x:-x;}//

鏈式前向星添邊

void add(int

from,int to,int

dis)

//和常見spfa一樣,在其中判斷條件即可

bool

spfa() }}

}return

false;}

intmain()

if(spfa()) cout<

ye5"

<

;

else cout<

<

; }

return

0;//

平淡的結束

}

評測記錄

洛谷 P3385 模板 負環

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

洛谷 P3385 模板 負環

題目鏈結 一開始沒注意到他的邊是非負就是雙向的。所以一直wa 用spfa。bfs判斷是否有乙個點進入次數超過n即可。include include include include include include define maxn 2005 using namespace std typedef...

洛谷 P3385 負環

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