求助超级玄学错误(不用管代码,就是很简单的一个问题)
  • 板块学术版
  • 楼主_LanFeng_
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/9/16 20:55
  • 上次更新2023/11/4 06:36:52
查看原帖
求助超级玄学错误(不用管代码,就是很简单的一个问题)
65190
_LanFeng_楼主2021/9/16 20:55
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=500010;
int n,m;
int Start[N<<1],End[N<<1],Last[N],Next[N<<1];
int visitime;
int dfn[N],son[N];
vector<int> G[N];
int ans[N],s[N];
int tot;
int ban1,ban2;
int st[N],tp,ed,last;
bool mark[N],vis[N],flag;
int read()
{
    int x=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-f;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-48;s=getchar();}
    return x*f;
}
int cnt;
void add(int a,int b)
{
	Start[++cnt]=a,End[cnt]=b,Next[cnt]=Last[a],Last[a]=cnt;
}
void getcircle(int x)
{
	while(st[tp]!=ed)
	{
		mark[x]=1;
		x=st[--tp];
	}
	mark[ed]=1;
}
void dfs(int x,int fa)
{
	dfn[x]=++visitime;
	st[++tp]=x;
	for(int i=Last[x];i;i=Next[i])
	{
		if(End[i]!=fa&&dfn[End[i]])
		{
			if(flag) continue;
			ed=End[i];
			getcircle(x);
			flag=1;
			continue;
		}
		if(End[i]==fa) continue;
		dfs(End[i],x);
	}
	tp--;
}
void dp(int x,int fa)
{
	cout<<x<<" ";
	vis[x]=1;
	for(int i=0;i<G[x].size();i++)
	{
		int u=G[x][i];
		if(u==fa||mark[u]&&vis[u]) continue;
		if(mark[u]&&mark[x]&&!flag)
		{
			if((i==G[x].size()-1||i==G[x].size()-2&&vis[G[x][i+1]])) 
			{
				if(last&&last<u) 
				{
					flag=1;
					return;
				}
			}
			else last=G[x][i+1];
		}
		dp(u,x);
	}
}
int main()
{
	int a,b;
	n=read(),m=read();
	for(int i=1;i<=m;i++)
	{
		a=read(),b=read();
		G[a].push_back(b);
		G[b].push_back(a);
		add(a,b);
		add(b,a);
	}
	for(int i=1;i<=n;i++)
	sort(G[i].begin(),G[i].end());
    cout<<tot<<endl;//这里的tot会输出0
	dfs(1,0);
	cout<<tot<<endl;//这里会输出10
	flag=0;
	dp(1,0);
	return 0;
}

如代码最后几排标注。问题就在于dfs函数里面根本就没有涉及到tot这个变量。为什么tot会变化呢?

数据

100 100
62 23
44 94
39 50
95 83
26 15
4 69
56 66
53 38
79 28
86 70
4 57
87 48
30 29
87 43
78 8
71 28
21 27
22 75
4 16
42 32
74 39
93 35
53 56
10 44
11 60
48 37
51 65
17 10
85 33
76 98
41 22
52 71
3 90
79 83
73 78
80 51
97 4
73 40
46 99
38 91
100 87
77 11
65 78
95 84
74 96
90 63
86 32
72 43
66 73
28 31
6 75
83 14
64 54
63 7
87 58
62 91
42 21
24 36
25 30
94 6
25 92
82 77
89 42
15 52
4 18
37 49
74 2
19 43
34 35
3 69
42 68
65 82
50 25
59 93
12 29
54 74
9 48
22 96
76 47
93 43
5 54
67 65
95 21
47 60
24 20
12 33
76 49
88 90
15 44
81 37
63 34
62 24
45 29
32 1
6 13
70 20
16 85
6 61
55 83
46 17
2021/9/16 20:55
加载中...