題目鏈結
思路:因為n是1e4,所以floyd求傳遞閉包肯定是不行的,二維陣列都開不了這麼大,複雜度也不對,然後就學了下tarjan縮點,因為每個強連通分量裡的每個牛肯定是互相喜歡的,所以我們要找強連通分量出度為0的那一團。
1.只找到一團出度為0的強連通分量,答案就是那一團的大小。
2.找到0或多團強連通分量,答案是0,因為他們不互相喜歡,也就是不是所有的牛都喜歡他。
#include
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, a, b) for (int i = (int)(a); i >= (int)b; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, r, l) for (int i = (r); i >= (l); i--)
#define ms(x, y) memset(x, y, sizeof(x))
#define sz(x) ((int)(x).size())
using
namespace std;
typedef pair<
int,
int> pii;
typedef vector<
int> vi;
typedef vector vpi;
typedef vector vvi;
typedef
long
long i64;
typedef vector vi64;
typedef vector vvi64;
typedef pair pi64;
typedef
double ld;
template
<
class
t>
bool
uin(t &a, t b)
template
<
class
t>
bool
uax(t &a, t b)
const
int maxn =
(int
)1e4
+1000
;//點數
int scc, top, tot;
vector<
int> g[maxn]
;int low[maxn]
, dfn[maxn]
, belong[maxn]
;int stk[maxn]
, vis[maxn]
;int sz[maxn]
, out[maxn]
;void
init
(int n)
scc = top = tot =0;
}void
tarjan
(int x)
else
if(vis[to])}
if(low[x]
== dfn[x]
)while
(temp != x);}
}int n, m;
intmain()
for1
(i, n)if(
!dfn[i]
)tarjan
(i);
for1
(i, n)
}int cnt =
0, ans =0;
for1
(i, scc)}if
(cnt ==
1) cout << ans <<
'\n'
;else cout <<
0<<
'\n'
;#ifdef local_define
cerr <<
"time elapsed: "
<<
1.0*
clock()
/ clocks_per_sec <<
" s.\n"
;#endif
return0;
}
洛谷 P2341 受歡迎的牛
畫一張圖形象一下 tarjan演算法模板,這裡用於縮點 1931 else if col k 3235 36 if low u dfn u 3746 pru.pop 47 48return 49 50signed main 5158 for register int i 1 i n i 5964 6...
洛谷P2341 受歡迎的牛
usaco03fall haoi2006 受歡迎的牛 g 洛谷 電腦科學教育新生態 luogu.com.cn 用 tarjan 縮點後,在每個強連通分量中的點都可以互相到達。在 dag 中 如果有大於 1 個出口,則兩個出口之間肯定不能相互到達,所以沒有明星 如果只有乙個出口,則別的點一定可以到出口...
洛谷P2341(受歡迎的牛)題解
題目描述 每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶 歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你 算出有多少頭奶牛可以當明星。輸入輸出格式 輸入格式 第一行 兩個用空格分開的整數 n和m 第二行到第m 1行 每行兩個用空格...