好奇怪,奇怪的越界
查看原帖
好奇怪,奇怪的越界
979656
Sgt_Dante楼主2023/9/4 21:23

代码一

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pii pair<int,int>
#define endl "\n"
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define debug(x) cout<<#x<<"="<<x<<endl 
const int MAXN=1e5+5;
vector<int>edge[MAXN];
int n,m; 
int ans[MAXN],vis[MAXN];
void dfs(int i,int a){
	if(ans[i]==0){
		ans[i]=a;
		for(int j1=0;j1<vis[i];j1++){
			int j=edge[i][j1];
			if(ans[j]==0){
				dfs(j,a);
		 	}
		}
	}
	else{
		return ;
	}
}
int main(){
	cin>>n>>m;
	int u,v;
//	memset(ans,-1,sizeof(ans));
	for(int i=0;i<m;i++){
		cin>>u>>v;
		if(u!=v) {
			edge[v].push_back(u);
		}
		vis[v]++;
	}
	for(int i=n;i>0;i--){
		dfs(i,i);
//		cout<<ans[n-i+1]<<" ";
	}
	for(int i=0;i<n;i++){
		cout<<ans[i+1]<<" ";
	}
	return 0;
}

90分

代码2

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pii pair<int,int>
#define endl "\n"
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define debug(x) cout<<#x<<"="<<x<<endl 
const int MAXN=1e5+5;
vector<int>edge[MAXN];
int n,m; 
int ans[MAXN];
void dfs(int i,int a){
	if(ans[i]==0){
		ans[i]=a;
		for(int j1=0;j1<edge[i].size();j1++)
			dfs(edge[i][j1],a);
	}
	else{
		return ;
	}
}
int main(){
	cin>>n>>m;
	int u,v;
//	memset(ans,-1,sizeof(ans));
	for(int i=0;i<m;i++){
		cin>>u>>v;
		if(u!=v) {
			edge[v].push_back(u);
		}
	}
	for(int i=n;i>0;i--){
		dfs(i,i);
//		cout<<i<<" "; 
//		cout<<ans[n-i+1]<<" ";
	}
	for(int i=0;i<n;i++){
		cout<<ans[i+1]<<" ";
	}
	return 0;
}

AC

我觉得也没区别啊,为啥15行的vis[i]vis[i]会越界

2023/9/4 21:23
加载中...