修改存储结构后WA on #10求调
查看原帖
修改存储结构后WA on #10求调
1034549
supermzc楼主2024/8/7 21:43

改为链式前向星后代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+7,MAXM=5e5+7;
struct node{
	int tar,lst;
};
node mar[MAXM];
int pos[MAXN],p;
void add(int a,int b){
	mar[++p].tar=b;
	mar[p].lst=pos[a];
	pos[a]=p;
}
bitset<MAXN> ans;
int tt=0,dfn[MAXN],low[MAXN];
void tarjan(int u,int root,int fa){
	dfn[u]=low[u]=++tt;
	int v;
	for(int i=pos[u];i!=0;i=mar[i].lst){
		v=mar[i].tar;
		if(!dfn[v]){
			tarjan(v,root,u);
			low[u]=min(low[u],low[v]);
			if(u!=root&&low[v]>=dfn[u]){
				for(int j=pos[u];j>0;j=mar[j].lst){
					ans[u]=ans[u]|(ans[mar[j].tar]&(dfn[mar[j].tar]>dfn[u]));
				}
			}
		}
		else low[u]=min(low[u],dfn[v]);
	}
}
int main(){
	int a,b,j,k,n;
	scanf("%d",&n);
	while(1){
		scanf("%d%d",&a,&b);
		if(a==0)break;
		add(a,b);
		add(b,a);
	}
	scanf("%d%d",&j,&k);
	ans[k]=1;
	tarjan(j,j,-1);
	for(int i=1;i<=n;i++)if(ans[i]==1&&i!=j&&i!=k){
		printf("%d",i);
		return 0;
	}
	printf("No solution");
}

邻接矩阵版RE #1,其余ac

#include<bits/stdc++.h>
using namespace std;
const int MAXN=200;
bitset<MAXN> mar[MAXN];
int low[MAXN],dfn[MAXN],color=0,step=0;
int n,j,k;
bool ans[MAXN];
bool cut[MAXN];
void tarjan(int x,int root,int fa){
	low[x]=dfn[x]=++step;
	for(int i=1;i<=n;i++){
		if(mar[x][i]==0)continue;
		if(!dfn[i]){
			tarjan(i,root,x);
			low[x]=min(low[i],low[x]);
			if(x!=root&&low[i]>=dfn[x]){
				for(int j=1;j<=n;j++)ans[x]=ans[x]|(mar[x][j]&ans[j]&(dfn[x]<dfn[j]));
			}
		}
		else if(i!=fa){
			low[x]=min(dfn[i],low[x]);
		}
	}
}
int main(){
	int a,b;
	scanf("%d",&n);
	while(1){
		scanf("%d%d",&a,&b);
		if(a==0)break;
		mar[a][b]=1;
		mar[b][a]=1;
	}
	scanf("%d%d",&j,&k);
	ans[k]=1;
	tarjan(j,j,-1);
	for(int i=1;i<=n;i++)if(ans[i]==1&&i!=j&&i!=k){
		printf("%d",i);
		return 0;
	}
	printf("No solution");
}
2024/8/7 21:43
加载中...