P3520 [POI2011] SMI-Garbage
  • 板块题目总版
  • 楼主luyucheng46
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/26 08:54
  • 上次更新2024/8/26 11:17:06
查看原帖
P3520 [POI2011] SMI-Garbage
752716
luyucheng46楼主2024/8/26 08:54

wa

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e6,N=1e5;
int n,m,num,cl,out,nxt[M+5],to[M+5],from[M+5],d[M+5];
bool vis[N+5],del[M+5],in[N+5];
stack<int> s;
queue<int> ans[N+5];
void addedge(int s,int t){ 
    num++;
	to[num]=t;
	nxt[num]=from[s];
	from[s]=num;	
}
void dfs(int x){
  //  cout<<"s "<<x<<endl;
	vis[x]=true;
	for(int i=from[x];i;i=nxt[i]){
		if(del[i])
			continue;
		del[i]=true; 
		del[(i%2==0)?i-1:i+1]=true;
     // cout<<i<<" "<<((i%2==0)?i-1:i+1)<<endl;
        from[x]=nxt[i];
		dfs(to[i]);                                                                    
	}	
	if(in[x]){
		cl++;
		ans[cl].push(x);
        in[x]=0;
		while(!s.empty()&&s.top()!=x){
			ans[cl].push(s.top());
            in[s.top()]=0;
			s.pop();
		}	
		ans[cl].push(x);
	}
	else{
		s.push(x);
		in[x]=1;
	}
  //cout<<"e "<<x<<endl;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b,s,t;
		cin>>a>>b>>s>>t;
		if(s!=t){
			addedge(a,b);
			addedge(b,a);
			d[a]++;
			d[b]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(d[i]%2==1){
			cout<<"NIE"<<endl;
			return 0;
		}
	}
	for(int i=1;i<=n;i++){
		if(!vis[i])
			dfs(i);
        out=0;
       // cout<<"!";
	}
	cout<<cl<<endl;
	for(int i=1;i<=cl;i++){
		cout<<ans[i].size()-1<<" ";
		while(!ans[i].empty()){
            cout<<ans[i].front()<<" ";
            ans[i].pop();
        }
		cout<<endl;
	}
	return 0;
}
2024/8/26 08:54
加载中...