C 班長競選

2021-10-04 23:16:38 字數 1471 閱讀 8130

大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適,給出m個意見,找到得票最多的人

dfs求出每個點所在的連通分量,然後縮點,並記錄縮點之後每個點的入度(要將圖反向),遍歷得到每個點連通的點數,減去自己即為得票數,而與該點在同乙個連通分量內的點都可選。

#include

#include

#include

#include

#include

using

namespace std;

int t, n, m;

const

int maxn =

5010

;const

int inf =

0x3f3f3f3f

;int vis[maxn]

, cmp[maxn]

,pre[maxn]

,low[maxn]

,sz[maxn]

,dfs_clock,k;

vector<

int> g[maxn]

, rg[maxn]

;stack<

int> s;

void

dfs(

int u)

elseif(

!cmp[v]

) low[u]

=min

(low[u]

, low[v]);

}if(pre[u]

== low[u])}

}int

rdfs

(int u)

return ans;

}void

scc()}

int in_deg[maxn]

;int support[maxn]

;int

main()

int x, y;

for(

int i =

0; i < m; i++

)scc()

;memset

(in_deg,0,

sizeof

(in_deg));

//縮點

for(

int i =

0; i < n; i++)}

int mx =0;

for(

int i =

1; i <= k; i++)}

cout <<

"case "

<< ca <<

": "

<< mx-

1<< endl;

bool flag =

false

;for

(int i =

0; i < n; i++)}

cout << endl;

}return0;

}

C 班長競選

大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適 勤勞的 tt 收集了m條意見,想要知道最高票數,並給出乙份候選人名單,即所有得票最多的同學。從圖中找出所有強連通分量進行縮點,...

kosaraju 班長競選

大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適 勤勞的 tt 收集了m條意見,想要知道最高票數,並給出乙份候選人名單,即所有得票最多的同學,你能幫幫他嗎?本題有多組資料。第一...

week8 C 班長競選

大學班級選班長,n 個同學均可以發表意見 若意見為 a b 則表示 a 認為 b 合適,意見具有傳遞性,即 a 認為 b 合適,b 認為 c 合適,則 a 也認為 c 合適 勤勞的 tt 收集了m條意見,想要知道最高票數,並給出乙份候選人名單,即所有得票最多的同學,你能幫幫他嗎?本題有多組資料。第一...