Neither shaken nor stirred(DFS理解+vector存图)
时间:2019-08-07
本文章向大家介绍Neither shaken nor stirred(DFS理解+vector存图),主要包括Neither shaken nor stirred(DFS理解+vector存图)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=2013
题目理解:
给定n个点的有向图:
下面n行,第一个数字表示点权,后面一个数字m表示有m条边。
起点是1.
对于每个点,输出2个值表示前驱点权1和该点点权2。
1、就是若有多条路径且全为“同一个值”输出“同一个值”,否则输出unknown;
若有一条路径若前驱节点的权值>0,输出前驱结点的权值,否则输出sober;
2、否则若该点点权>0输出该点点权,否则输出前驱点权值(若有多条路径且全为“同一个值”输出“同一个值”,否则输出unknown;
若有一条路径若前驱节点的权值>0,输出前驱结点的权值,否则输出sober)
AC代码+详解
1 /* */ 2 # include <iostream> 3 # include <stdio.h> 4 # include <string.h> 5 # include <algorithm> 6 # include <bitset> 7 # include <ctime> 8 # include <cmath> 9 # include <list> 10 # include <cctype> 11 # include <cassert> 12 # include <iomanip> 13 # include <deque> 14 # include <queue> 15 # include <stack> 16 # include <set> 17 # include <map> 18 # include <vector> 19 using namespace std; 20 21 const int inf=0x3f3f3f3f; 22 const int maxn=2e5+50; 23 int a[maxn]; 24 int zt[maxn]; 25 vector<int>ve[maxn]; 26 27 void dfs(int x, int y)///x此结点,y前驱结点的权值 28 { 29 if( zt[x]==-2 )///有两个前驱,(既然已经判断出有两个前驱,且此路之前来过,就没必要再往下遍历了) 30 return ; 31 32 33 if( !zt[x] )///还没有访问过 34 zt[x] = y;///记录其前驱节点的权值 35 else///已经访问过之后又来访问说明有两个前驱结点了,标记一下 36 zt[x] = -2; 37 38 39 if( a[x] )///此结点的权值不为0 40 y=a[x]; 41 42 43 for( auto it:ve[x] ) 44 { 45 if( zt[it]!=y )///之前的前驱结点的值不为现在前驱结点的值, 46 ///若zt[it]原来为0,说明没有遍历过 47 ///若zt[it]原来为-1,或者是一个正整数 48 ///但之前前驱结点的值与此时前驱节点的值不一样 49 ///那么就再进行一次遍历 50 ///至于具体是什么情况,for有前面的判断决定 51 { 52 dfs(it, y); 53 } 54 } 55 56 } 57 58 int main() 59 { 60 memset(zt, 0, sizeof(zt)); 61 int n; 62 cin>>n; 63 for(int i=1; i<=n; i++ ) 64 { 65 cin>>a[i]; 66 int x; 67 cin>>x; 68 for(int j=1; j<=x; j++ ) 69 { 70 int y; 71 cin>>y; 72 ve[i].push_back(y); 73 } 74 } 75 dfs(1, -1); 76 77 for(int i=1; i<=n; i++ ) 78 { 79 if( zt[i]==-1 ) 80 cout<<"sober "; 81 82 else if( zt[i]==-2 ) 83 cout<<"unknown "; 84 85 else 86 cout<<zt[i]<<' '; 87 88 if( a[i]>0 ) 89 cout<<a[i]<<endl; 90 91 else 92 { 93 if( zt[i]==-1 ) 94 cout<<"sober"<<endl; 95 96 else if( zt[i]==-2 ) 97 cout<<"unknown"<<endl; 98 99 else 100 cout<<zt[i]<<endl; 101 } 102 } 103 return 0; 104 }
原文地址:https://www.cnblogs.com/wsy107316/p/11317958.html
- 【翻译】MongoDB指南/CRUD操作(三)
- 为什么 Laravel 会成为最成功的 PHP 框架?
- 【生信菜鸟经】如何系统入门Perl
- 【翻译】MongoDB指南/CRUD操作(四)
- R包终极解决方案
- Table被web编程弃用的原因
- Web安全实战
- 【翻译】MongoDB指南/聚合——聚合管道
- PHP异步高并发扩展Swoole
- TensorFlow从0到1丨 第五篇:TensorFlow轻松搞定线性回归
- 【直播】我的基因组59:把我的数据伪装成23andme或wegene的芯片数据
- asp.net web api客户端调用
- 细说WebSocket - Node篇
- TensorFlow从0到1丨 第六篇:解锁梯度下降算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 重学巩固你的Vuejs知识(上)
- js原生模态登录框
- 客户决策 | 我的代码没有else
- LeetCode 1595 Minimum Cost to Connect Two Groups of Points (动态规划)
- js DOM系统
- css的radial-gradient大详解
- 你想知道的优惠券业务,SkrShop告诉你
- js汇率计算器系统
- 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)
- JS逐步教你做(自己版本)的视频播放器(我先声明,step我不懂是什么意思,所以没用)
- 【mysql系列】细谈“explain”之理论Part
- 如果用java swing编写一个五子棋(人人对战)
- 【mysql系列】细谈explain执行计划之“谜”
- 洛谷 P1352 没有上司的舞会(树形 DP)
- CF思维联系– CodeForces - 991C Candies(二分)