MLE求条
查看原帖
MLE求条
773300
Qzh2102楼主2025/7/31 19:14
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=2e5+200;
int n,m,f[mxn],h[mxn];
vector<int>ans;
vector<pair<int,int>>e[mxn];
inline void init(int x)
{
	ans.clear();
	for (int i=1;i<=x;i++)
	{
		e[i].clear();
		f[i]=i;
		h[i]=1;
	}
}
inline int find(int x)
{
	return x==f[x] ? x : (f[x]=find(f[x]));
}
inline void tog(int i,int j)
{
	int x=find(i);int y=find(j);
	if (x==y) return void();
	if(h[x]<=h[y]) f[x]=y;
	else f[y]=x;
	if (h[x]==h[y])h[y]++;
}
inline bool check(int i,int j)
{
	return find(i)==find(j);
}
inline bool dfs(int x,int now,int f)
{
	if(now==x) return 1;
	for(auto to:e[now])
	{
		if(to.first==f) continue;
		ans.push_back(to.second);
		if(dfs(x,to.first,now)) return 1;
		ans.pop_back();
	}
	return 0;
}
inline void solve()
{
	cin>>n>>m;
	init(n);
	for (int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		if (check(u,v))
		{
			e[u].push_back({v,i});
			e[v].push_back({u,i});
			dfs(v,u,u);
			sort(ans.begin(),ans.end());
			ans.push_back(i); 
			int las=0;
			for (auto j:ans)
			{
				if (j!=las) cout<<j<<" ";
				las=j;
			}
			cout<<"\n";
			return;
		}
		tog(u,v);
		e[u].push_back({v,i});
		e[v].push_back({u,i});
	}
	cout<<-1<<'\n';
	return void(); 
}
signed main()
{
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(0);
	int T;cin>>T;
	while (T--) solve();
	return 0;
}

如题

2025/7/31 19:14
加载中...