RE on #12 求调
查看原帖
RE on #12 求调
536745
WaTleZero_pt楼主2024/10/18 23:25

为啥崩溃啊萌新没看出来

codeforces的提示也没看出有什么问题

https://codeforces.com/contest/1364/submission/286570838

#include<bits/stdc++.h>
using namespace std;
int head[100010];
struct Edge{
	int v,nxt;
}edge[400010]; int cntE;
void addedge(int u,int v){
	edge[++cntE].v=v;
	edge[cntE].nxt=head[u];
	head[u]=cntE;
}
bool vis[100010];
int cnt=0;
int n,m,k,u,v;
void dfs(int u){
	vis[u]=1; cnt++;
	for(int i=head[u];i;i=edge[i].nxt){
		if(cnt==k) return;
		if(vis[edge[i].v]==0) dfs(edge[i].v);
	} 
}
bool vis2[100010];
bool istree(int u,int fa){
	bool res=1;
	vis2[u]=1;
	for(int i=head[u];i;i=edge[i].nxt){
		if(vis[edge[i].v]==0) continue;
		if(edge[i].v==fa) continue;
		if(vis2[edge[i].v]) return 0;
		else res|=istree(edge[i].v,u); 
	}
	return res;
}
vector<int> a[2];
void treesolve(int u,int fa,int dep){
	a[dep].push_back(u);
	for(int i=head[u];i;i=edge[i].nxt){
		if(vis[edge[i].v]==0||edge[i].v==fa) continue;
		treesolve(edge[i].v,u,dep^1);
	}
}
bool considered[100010];
stack<int> st;
int anslis[100010]; int len=0;
bool graphsolve(int u,int fa){
//	printf("%d %d\n",u,fa);
	if(considered[u]==1){
		while(!st.empty()){
			anslis[++len]=st.top();
			if(st.top()==u) return 0;
			st.pop();
		}
		return 0;
	}
	considered[u]=1; st.push(u);
	for(int i=head[u];i;i=edge[i].nxt){
		if(vis[edge[i].v]==0||edge[i].v==fa) continue;
		if(graphsolve(edge[i].v,u)==0) return 0;
	}
	return 1;
}
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		addedge(u,v);
		addedge(v,u);
	}
	dfs(1);
//	for(int i=1;i<=n;i++) printf("%d ",vis[i]); putchar('\n');
	if(istree(1,0)){
		treesolve(1,0,0);
		int x=0;
		if(a[1].size()>=(k+1)/2) x=1;
//		printf("%d %d %d\n",a[0].size(),a[1].size(),x);
		printf("1\n");
		for(int i=0;i<(n+1)/2;i++) printf("%d ",a[x][i]);
	}else{
		graphsolve(1,0);
		printf("2\n%d\n",len);
		for(int i=1;i<=len;i++) printf("%d ",anslis[i]);
	}
}
2024/10/18 23:25
加载中...