90分求调
查看原帖
90分求调
1074889
zg_ji楼主2024/8/18 11:29
#include<bits/stdc++.h>
#define int long long
const int N=1e5+10;
using namespace std;

int s;
int x;
int ans;
int n,k; 
int a[N];
bool f[N];

inline int dfs(int x)
{
	if(x==0||f[x]==true) return x;
	f[x]=true;
	ans++;
	return dfs(a[x]); 
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>k;
	int cnt=0;
	while(k--)
	{
		cin>>s;
		for(int i=1;i<=s;i++)
		{
			cin>>x;a[++cnt]=x;
			if(x==cnt) f[x]=true;
		}
	}
	for(int i=1;i<=cnt;i++)
	{
		if(f[i]==true) continue;
		if(dfs(a[i])==a[i]) ans++;
	}
	if(ans!=0) cout<<"We need "<<ans<<" move operations.";
	else cout<<"No potimization needed.";

	return 0;

}
2024/8/18 11:29
加载中...