Codeforces D. Giving Awards 412(DFS)

题意:

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

}

}

时间: 2024-11-07 12:41:21

Codeforces D. Giving Awards 412(DFS)的相关文章

Codeforces D. Giving Awards 412 题解

就是按照一定顺序输出排序. 比如a欠b的钱就不能先输出a然后输出b. 本题的技巧就是,要求的是不能先输出a然后输出b,但是可以先输出b然后输出a. 故此可以按照a欠b的钱的关系,建立图,然后DFS深度优先搜索,然后逆向记录点,输出这些逆向点,也就是a欠b的钱,就先输出b然后输出a,那么这个顺序就满足要求了. 很狡猾的题意.要细心.不然就搞半天都白搞了. 题目连接:http://codeforces.com/problemset/problem/412/D #include <stdio.h>

codeforces 337E Book of Evil (dfs)

题目链接 http://codeforces.com/contest/337/problem/D 题意:给一棵n个结点的树,边权都为1.在树上的某个结点有一个"恶魔之书",这 本书会让距离它d以内的节点都受到影响.现在已知有m个节点收到了影响,问最 多有几个结点可能放着"恶魔之书"? 思路:首先我们需要找出受到影响的点中,两两距离最远的一对点,之后,只需要 计算有多少个点到这两个点的距离都小于d.这样就能求出答案. 找出最远点对的方法:我们首先以1节点为根节点,算出

Codeforces 982 C. Cut &#39;em all!(dfs)

解题思路: 代码中有详细注解,以任意一点为根,dfs遍历这棵树. 每一个节点可能有好几个子树,计算每棵子树含有的节点数,再+1即为这整棵树的节点. 判断子树是否能切断与根之间的联系,如果子树含有偶数个节点,则这棵子树可以被切断. 注意: 若由于我们建立这棵树的时候不知道两个连接的节点谁是谁的父节点. 所以我们在dfs中加个标记,找出除父节点以外的其他节点. #include <bits/stdc++.h> using namespace std; typedef long long ll; l

POJ 3087 Shuffle&#39;m Up (DFS)

题目链接:Shuffle'm Up 题意:有a和b两个长度为n的字符序列,现定义操作: 将a.b的字符交叉合并到一个序列c,再将c最上面的n个归为a,最下面n个归为b 给出a,b和目标序列c,问最少多少次操作a.b转化为c 解析:将a.b放入哈希表,然后模拟操作过程直接dfs即可. AC代码: #include <cstdio> #include <iostream> #include <cstring> #include <map> using names

LeetCode Subsets (DFS)

题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 return a

POJ 1699 Best Sequence(DFS)

題目鏈接 題意 : 將幾個片段如圖所示方法縮成一個序列,求出最短這個序列. 思路 : 其實我也不知道怎麼做.....看網上都用了DP.....但是我不會.....這個DP不錯,還有用KMP+状压DP做的 1 //1699 2 #include <iostream> 3 #include <stdio.h> 4 #include <string.h> 5 #include <string> 6 7 using namespace std; 8 9 string

LeetCode Subsets II (DFS)

题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) 1 class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 sort(nums.begin(),nums.end()); 5 DFS(0,nums,tmp); 6 ans.push_back(vector

poj A Knight&#39;s Journey(DFS)

题目链接:http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=190592 题意:给出p*q的棋盘,从(A,1)开始,走“日”字,问能否走完棋盘上所有的点,如果能,按字典序输出路径: 思路:DFS,并保存路径即可,注意处理走的方向顺序int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; #include <stdio.h> #in

Codeforces Round #259 (Div. 2) (序列)

题目链接:http://codeforces.com/contest/454/problem/B B. Little Pony and Sort by Shift time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output One day, Twilight Sparkle is interested in how to sort a se