求助玄学
查看原帖
求助玄学
289059
Helium_Ship楼主2022/1/14 08:55
#include<bits/stdc++.h>
using namespace std;
int n,x,tot,cmp[1000010],u,v,m;
vector<int> G[1000010],G2[1000010],a,a2;
bool used[1000010];
void dfs1(int s)
{
	used[s]=1;
	for (int i=0;i<G[s].size();i++)
		if (!used[G[s][i]])
			dfs1(G[s][i]);
	a.push_back(s);
}
void dfs2(int s,int ss)
{

	used[s]=1;
	cmp[s]=ss;
	for (int i=0;i<G2[s].size();i++)
		if (!used[G2[s][i]])
			dfs2(G2[s][i],ss);
	a2.push_back(s);
}
void add(int x,int y)
{
	G[x].push_back(y);
	G2[x].push_back(y); 
}
int main()
{
	cin>>n>>m;
	for (int i=1;i<=m;i++)
		cin>>u>>v,add(u-1,v-1);
	memset(used,0,sizeof(used));
	a.clear();
	for (int i=0;i<n;i++)
		if (!used[i])
			dfs1(i);
	int k=0;
	memset(used,0,sizeof(used));
	for (int i=n-1;i>=0;i--)
		if (!used[a[i]])
			dfs2(a[i],k++);
	cout<<k;
	return 0;
}

为什么这道题,没开O2RE了

this

开了O2就AC了

this

2022/1/14 08:55
加载中...