博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces VK Cup 2012 Round 3 A. Variable, or There and Back Again(dfs)
阅读量:5900 次
发布时间:2019-06-19

本文共 1076 字,大约阅读时间需要 3 分钟。

题目链接:

思路:用vector分别保留原图和发图,然后分别从val值为1的点正向遍历,va值为2的点反向遍历,如果某个点这两种方式都可以遍历到,则输出1,否则输出0.

#include 
#include
#include
#include
#include
#define REP(i, a, b) for (int i = (a); i < (b); ++i)#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)using namespace std;const int MAX_N = (100000 + 100);int N, M, val[MAX_N], vis1[MAX_N], vis2[MAX_N];int path[MAX_N];vector
g1[MAX_N], g2[MAX_N];void dfs(int u, int fa){ vis1[u] = 1; REP(i, 0, (int)g1[u].size()) { int v = g1[u][i]; if (!vis1[v] && v != fa && val[v] != 1) dfs(v, u); }}void rdfs(int u, int fa){ vis2[u] = 1; if (val[u] == 1) return; REP(i, 0, (int)g2[u].size()) { int v = g2[u][i]; if (!vis2[v] && v != fa) rdfs(v, u); }}int main(){ cin >> N >> M; FOR(i, 1, N) cin >> val[i]; FOR(i, 1, M) { int u, v; cin >> u >> v; g1[u].push_back(v); g2[v].push_back(u); } FOR(i, 1, N) { if (val[i] == 1) dfs(i, -1); else if (val[i] == 2) rdfs(i, -1); } FOR(i, 1, N) printf("%d\n", (vis1[i] & vis2[i])); return 0;}


转载地址:http://fchsx.baihongyu.com/

你可能感兴趣的文章
SQL Server-表表达式基础回顾(二十四)
查看>>
DAO层,Service层,Controller层,View层
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
LINQ高级编程 笔记
查看>>
Android 应用开发推荐书单
查看>>
自定义有监听器的ScrollView
查看>>
BAE Flask UEditor 使用七牛云
查看>>
关联的特殊应用
查看>>
Bootstrap系列 -- 15. 下拉选择框select
查看>>
【转载】无限级分类的简单实例
查看>>
基础总结篇之一:Activity生命周期
查看>>
关于WinPE安装操作系统
查看>>
Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程
查看>>
使用iftop网络流量监控
查看>>
LeetCode Median of Two Sorted Arrays
查看>>
(算法)两个人是否为队友
查看>>
oschina程序开发
查看>>
mysql创建每月执行一次的event
查看>>
直接刷脸?一元就能搞定会议签到!
查看>>
kafka集群部署
查看>>