题意:
给出n , m 然后给出m组关系, 表示前者不能出现在后者的前方, 即 a b 不行 但是 b a 是可以的
然后构建出一个序列 满足所有关系。
题解:
由题可知 , 需要满足关系, 直接构图, 然后DFS , 然后反向输出答案 然后没了。
代码:
#include<stdio.h>
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
vector<int> mark[30005];
vector<int> Ans;
int vis[300005], n, m;
void dfs(int x)
{
vis[x] = 1;
for(int i = 0; i < mark[x].size(); i++)
{
if(vis[mark[x][i]]) continue;
dfs(mark[x][i]);
}
Ans.push_back(x);
}
int main()
{
int a, b;
while(scanf("%d %d", &n, &m) != EOF)
{
for(int i = 1; i <= n; i++) mark[i].clear();
Ans.clear();
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= m; i ++)
scanf("%d %d", &a, &b), mark[a].push_back(b);
for(int i = 1; i <= n; i++)
if(!vis[i]) dfs(i);
for(int i = 0; i < Ans.size(); i++)
printf("%d ", Ans[i]);
printf("\n");
}
}