Codeforces D. Giving Awards 412(DFS)

来源:互联网 发布:淘宝标着极有家可信吗 编辑:程序博客网 时间:2024/06/06 02:05

题意: 

给出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");       
     }    
}

0 0
原创粉丝点击