啊,拓扑排序的逆序应当是dfs序的正序啊
```cpp
void dfs(int u){
for(int i = 0;i < vct[u].size();i++){
int v = vct[u][i];
if(!vis[v])dfs(v);
}
p[u] = ++cnt;
vis[u] = 1;
return ;
}
```
by 帝都_henry26268 @ 2023-11-09 21:26:08
Orz
by CNCAGN @ 2023-11-09 22:59:38
@[帝都_henry26268](/user/315655) 我是反向存的边QAQ
by vegetable_doggy @ 2023-11-10 13:11:44
@[CNCAGN](/user/65161) orz
by vegetable_doggy @ 2023-11-10 15:38:37
不好说是哪里错了,要不你再检查一下你代码的逻辑,我不太确定反向建边可不可行
我的代码如下
```cpp
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
const int MAXN = 1e5+10;
const int MAXM = 2e5+10;
int n,m1,m2;//m1有向,m2无向
vector<int> vct[MAXN];
int vis[MAXN];
int p[MAXN];
int cnt = 0;
void dfs(int u){
for(int i = 0;i < vct[u].size();i++){
int v = vct[u][i];
if(!vis[v])dfs(v);
}
p[u] = ++cnt;
vis[u] = 1;
return ;
}
int main(){
cin >> n >> m1 >> m2;
for(int i = 1;i <= m1;i++){
int u,v;cin >> u >> v;
vct[u].push_back(v);
}
for(int i = 1;i <= n;i++){
if(!vis[i])
dfs(i);
}
for(int i = 1;i <= m2;i++){
int u,v;cin >> u >> v;
if(p[u] > p[v])cout << u << " " << v << endl;
else cout << v << " " << u << endl;
}
return 0;
}
```
by 帝都_henry26268 @ 2023-11-10 15:44:55
@[vegetable_doggy](/user/755293)
by 帝都_henry26268 @ 2023-11-10 15:45:21
@[帝都_henry26268](/user/315655) A了,可能思路就错了
改拓扑排序过了 ,感谢感谢
by vegetable_doggy @ 2023-11-10 15:51:04