90分,m>3n-6有问题???
查看原帖
90分,m>3n-6有问题???
244689
zengjianye楼主2024/8/20 15:11
#include<bits/stdc++.h>
using namespace std;
const int N=10010*2;
int t,n,m,id[N];
vector<int>v[N];
struct edge{
	int u,v;
}e[N];

int tot,dfn[N],low[N],scc[N],cnt;
int st[N],top;
void tarjan(int x){
//	cout<<x<<"*"<<endl;
	dfn[x]=low[x]=++tot;
	st[++top]=x;
	for(int i=0,y;i<v[x].size();i++){
		y=v[x][i];
		if(dfn[y]==0)tarjan(y),low[x]=min(low[x],low[y]);
		else if(scc[y]==0)low[x]=min(low[x],low[y]);
	}
	if(low[x]==dfn[x]){
		cnt++;
		for(int y=0;y!=x;){
			scc[y=st[top--]]=cnt;
		}
	}
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		memset(low,0,sizeof low);
		memset(dfn,0,sizeof dfn);
		memset(scc,0,sizeof scc);
		tot=0,cnt=0;
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			cin>>e[i].u>>e[i].v;
		}
		for(int i=1,a;i<=n;i++){
			cin>>a;
			id[a]=i;
		}
		for(int i=1;i<=m;i++){
			e[i].u=id[e[i].u];
			e[i].v=id[e[i].v];
			if(e[i].u>e[i].v)swap(e[i].u,e[i].v);
		}
		if(m>n*3-6){////////这样子只有90分 
			cout<<"NO"<<endl;
			continue;
		}//如果改成 m>1000 就能100分???
	return 0;
}

离谱问题之m>3n-6过不了第八个点(+6也过不了》)

2024/8/20 15:11
加载中...