找最小環 洛谷P2661

2022-03-11 13:36:30 字數 782 閱讀 1455

題意:每個人都有乙個傳遞物件,一開始每個人都只知道自己的生日,每一輪都會把自己所知道生日告訴給傳遞物件,當從別人處聽得自己生日時遊戲結束,求問最少可以玩幾輪遊戲。

分析:就是找最小環,dfs來做,兩個vis陣列做標記(**裡把乙個記為used),used陣列屬於常規的vis陣列,標示這個點已經訪問過了,不用走了,vis陣列是用來求最小環的,在沒次查詢中設定。具體看**

#includeusing

namespace

std;

typedef

long

long

ll;const

int maxn=2e5+7

;const

int n=maxn*20

;const ll inf=0x3f3f3f3f

;#define mem0(a) memset(a,0,sizeof(a))

intd[maxn];

int ans=inf;

int step[maxn];//

用來記錄在乙個迴圈裡第一次經過乙個點時經過的邊數

int vis[maxn],used[maxn];//

vis陣列記錄本次查詢中已經經過的點(用來判斷是否是環),used陣列用來標記該點已經走過一次了,不用再走了

void dfs(int nd,int num)

else

}int

main()

for(int i=1;i<=n;i++)

cout

return0;

}

洛谷 P2661 資訊傳遞(拓撲排序 最小環)

最大環 用拓撲排序,將能在拓撲佇列中的所有點刪掉,即這些點不能在環中,判環。然後找出在環中的點,進行dfs,搜一遍環看它的sum,取min ac 1 include2 include3 include4 include5 include6 using namespace std 7int n,ans...

洛谷P2661 資訊傳遞 拓撲排序求最小環

由題可知,乙個人能經別人知道自己的生日,則他必然在乙個環中,所以顯然題目是讓我們求圖中最小的環。結合本題的特性,每個人的出度都為1 11,那麼每個人必定只在乙個環中。如果有人的入度為0 00則說明他一定不在環中,我們可以用拓撲的思想把他及他所連的邊刪去,然後繼續做拓撲排序刪除入度為0 00的點即可。...

洛谷P2661 資訊傳遞

有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資訊,但是每...