社区讨论
52分求调
P2341[USACO03FALL / HAOI2006] 受欢迎的牛 G参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mhjnt6lz
- 此快照首次捕获于
- 2025/11/04 05:35 4 个月前
- 此快照最后确认于
- 2025/11/04 05:35 4 个月前
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 4e5 + 10;
int n,m;
vector<int> a[maxn];
vector<int> b[maxn];
int low[maxn],cnt,sta[maxn],top,num,h[maxn],chu[maxn],dfn[maxn];
bool vis[maxn];
void tarjan(int u)
{
dfn[u] = low[u] = ++num;
sta[++top] = u;
vis[u] = 1;
for(int v : a[u])
{
if(dfn[v] == 0)
{
tarjan(v);
low[u] = min(low[u],low[v]);
}
else if(vis[v])
{
low[u] = min(low[u],dfn[v]);
}
}
if(low[u] == dfn[u])
{
cnt++;
while(sta[top] != u)
{
b[cnt].push_back(sta[top]);
vis[sta[top]] = 0;
h[sta[top]] = cnt;
top--;
}
b[cnt].push_back(sta[top]);
vis[sta[top]] = 0;
h[sta[top]] = cnt;
top--;
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> m;
for(int i = 1;i <= m;i++)
{
int u,v;
cin >> u >> v;
a[u].push_back(v);
}
for(int i = 1;i <= n;i++)
{
if(!dfn[i])
tarjan(i);
}
for(int i = 1;i <= n;i++)
{
for(int j = 0;j < a[i].size();j++)
{
if(h[i] != h[a[i][j]])
{
chu[h[i]]++;
}
}
}
int id = -1;
for(int i = 1;i <= cnt;i++)
{
if(chu[i] == 0)
{
if(id != -1)
{
cout << "0";
return 0;
}
}
id = i;
}
cout << 1;
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...