1 条题解

  • 0
    @ 2026-4-16 19:26:02

    数据好水啊,yzc神秘做法能过。

    UPD: spj 错了,全输出 -1 能过。

    所以这题正解还得是不用 kruscal 的生成树。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10;
    vector<int>G[N],G2[N];int rd[N],pre[N],v[N],s[N];
    struct node{int x,y,c;}e[N];map<pair<int,int>,int>mp;
    void dfs(int x)
    {
    	s[x]=rd[x];
    	for(int y:G2[x])
    	{
    		dfs(y);
    		s[x]^=s[y];
    	}
    }
    signed main()
    {
    	int n,m;cin>>n>>m;
    	for(int i=1;i<=m;i++)
    	{
    		int x,y;cin>>x>>y;
    		e[i]={x,y,0};
    		G[x].push_back(y);
    		G[y].push_back(x);
    		rd[x]^=1;
    		mp[{x,y}]=mp[{y,x}]=i;
    	}
    	if(m&1)
    	{
    		cout<<-1;
    		return 0;
    	}
    	deque<int>q;q.push_back(1);v[1]=1;
    	while(!q.empty())
    	{
    		int x=q.front();q.pop_front();
    		for(int y:G[x])if(!v[y])
    		{
    			G2[x].push_back(y);
    			q.push_back(y);v[y]=1;pre[y]=x;
    		}
    	}
    	dfs(1);
    	for(int i=2;i<=n;i++)
    	{
    		int id=mp[{pre[i],i}];
    		if(s[i])e[id].c^=1;
    	}
    	for(int i=1;i<=m;i++)
    	{
    		if(e[i].c)cout<<e[i].y<<' '<<e[i].x<<'\n';
    		else cout<<e[i].x<<' '<<e[i].y<<'\n';
    	}
    	return 0;
    }
    • 1

    信息

    ID
    8597
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    8
    已通过
    2
    上传者