样例已过+WA+0pts
查看原帖
样例已过+WA+0pts
938510
Cool_Windly楼主2024/11/30 15:00
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll n,m,k,cnt,u,v;
vector<bool> vis;
vector<ll> a;
vector<vector<ll>> adj;

bool find_edge(ll u,ll v)
{
  	for(ll i=0;i<adj[u].size();++i)
    	if(adj[u][i]==v)
      		return 1;
  	return 0;
}

void dfs(ll u)
{
  	if(vis[u]) return ;
  	vis[u]=1,++cnt;
  	for(ll i=0;i<adj[u].size();++i) dfs(adj[u][i]);
}

int main()
{
  	scanf("%lld%lld",&n,&m);
  	vis.resize(n+1);
  	adj.resize(n+1);
  	a.resize(n+1);
  	for(ll i=1;i<=m;++i)
  	{
    	scanf("%lld%lld",&u,&v);
    	adj[u].push_back(v);
  	}
  	for(ll i=1;i<=n;++i)
  	{
		if(!vis[i]) dfs(i);
		k+=cnt/2,cnt=0;
  	}
  	printf("%lld %lld\n",min(k,n-k),max(k,n-k));
  	return 0;
}
2024/11/30 15:00
加载中...