传送门:https://www.hackerrank.com/contests/world-codesprint-11/challenges/hackerland

【题解】

因为加点每次加1个点1条边,所以不会存在一定要经过后加的那些点才能到达的情况。

直接把最后的图建出来,tarjan缩强联通分量+拓扑排序处理连通性。

拿个bitset维护拓扑排序过程即可。复杂度O(n^2/32)

# include <queue>
# include <bitset>
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = 5e5 + ;
const int mod = 1e9+; # define RG register
# define ST static int n, m, head[M], nxt[M], to[M], tot=, c; struct Graph {
int head[M], nxt[M], to[M], tot;
inline void set() {tot = ;}
inline void add(int u, int v) {
++tot; nxt[tot] = head[u]; head[u] = tot; to[tot] = v;
}
}G1, G; struct pa {
int op, a, b;
}q[M]; int DFN = , dfn[M], low[M], bel[M], scc = ;
int st[M], stn=;
bool ins[M];
inline void tarjan(int x) {
dfn[x] = low[x] = ++DFN;
st[++stn] = x;
ins[x] = ;
for (int i=G1.head[x]; i; i=G1.nxt[i]) {
if(!dfn[G1.to[i]]) {
tarjan(G1.to[i]);
low[x] = min(low[x], low[G1.to[i]]);
} else if(ins[G1.to[i]]) low[x] = min(low[x], dfn[G1.to[i]]);
}
if(low[x] == dfn[x]) {
int t = ; ++scc;
while(t != x) {
t = st[stn];
--stn; ins[t] = ;
bel[t] = scc;
}
}
} bitset<> bs[];
int out[M], ans[M], an=;
queue<int> qu; int main() {
G1.set(), G.set();
cin >> n >> m; c = n;
for (int i=, u, v; i<=m; ++i) {
scanf("%d%d", &u, &v);
G1.add(u, v);
}
cin >> m;
for (int i=; i<=m; ++i) {
scanf("%d%d%d", &q[i].op, &q[i].a, &q[i].b);
if(q[i].op==) {
++c;
if(q[i].b) G1.add(c, q[i].a);
else G1.add(q[i].a, c);
}
}
for (int i=; i<=c; ++i) if(!dfn[i]) tarjan(i); // for (int i=1; i<=c; ++i) printf("%d\n", bel[i]); for (int i=; i<=c; ++i) {
bs[bel[i]][bel[i]] = ;
for (int j=G1.head[i]; j; j=G1.nxt[j])
if(bel[i] != bel[G1.to[j]]) {
bs[bel[i]][bel[G1.to[j]]] = ;
// printf("%d %d\n", bel[i], bel[G1.to[j]]);
out[bel[i]] ++;
G.add(bel[G1.to[j]], bel[i]);
}
}
for (int i=; i<=scc; ++i)
if(!out[i]) qu.push(i);
while(!qu.empty()) {
int top = qu.front(); qu.pop();
for (int i=G.head[top]; i; i=G.nxt[i]) {
--out[G.to[i]];
bs[G.to[i]] |= bs[top];
if(out[G.to[i]] == ) qu.push(G.to[i]);
}
}
// for (int i=1; i<=n; ++i, cout << endl)
// for (int j=1; j<=n; ++j) cout << bs[i][j] << ' '; for (int i=m; i; --i)
if(q[i].op == ) ans[++an] = bs[bel[q[i].a]][bel[q[i].b]]; for (int i=an; i; --i) puts(ans[i] ? "Yes" : "No"); return ;
}

Hackerrank [World CodeSprint 11] City Construction的更多相关文章

  1. Official Program for CVPR 2015

    From:  http://www.pamitc.org/cvpr15/program.php Official Program for CVPR 2015 Monday, June 8 8:30am ...

  2. Web 入门之 XML

      160916   1. 什么是XML?   XML 是 EXtensible Markup Language 的缩写,称为可扩展标记语言,所谓可扩展指用户可根据XML规则自定义标记.例子1-1 = ...

  3. Android 三级联动选择城市+后台服务加载数据库

    技术渣,大家将就着看 首先我们需要一个xml数据保存到数据库,这里我从QQ下面找到一个loclist.xml文件 <CountryRegion Name="中国" Code= ...

  4. 新浪微博SDK开发(1):总述

    花了几天时间,消耗了九牛六虎之力,新浪微博大部分API已经封装,但有部分API实在太难封装. 说起这封装,我必须严重地.从人品和技术层面鄙视一下新浪的程序员,实在太菜了.估计菜鸟都被大企业吸收了,菜到 ...

  5. 世界城市 XML

    下载地址:http://www.qlcoder.com/uploads/dd01140921/147988679320159.xml <Location> <CountryRegio ...

  6. R语言 recommenderlab 包

    recommend li_volleyball 2016年3月20日 library(recommenderlab) ## Warning: package 'recommenderlab' was ...

  7. R语言 推荐算法 recommenderlab包

    recommend li_volleyball 2016年3月20日 library(recommenderlab) library(ggplot2) # data(MovieLense) dim(M ...

  8. ajax读取XML文本(如读取城市)

    //加载城市 function loadArea_pep() { $.ajax({ url: "/xmlFile/crty.xml", success: function (res ...

  9. OAuth2.0 微博登陆网站功能的实现(一)获取用户授权及令牌 Access Token

    在登陆一些网站的时候,可以选择登陆方式为第三方登陆,例如微博登陆,以爱奇艺为例,进入首页,点击 ”登陆“,会弹出登录框: 除了本站登陆外,还可以选择其他第三方登陆,比如微博登陆.QQ 登陆.微信登陆等 ...

随机推荐

  1. 58HouseSearch项目迁移到asp.net core

    前言 58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+mono+jexus,这样看来整个项目基本已经满足跨平台 ...

  2. mysql8.0.14 安装

    1.下载 地址:https://dev.mysql.com/downloads/mysql/ 找到zip压缩文件. 2.配置环境变量 把解压后的路径配置到环境变量中 3.安装 在解压后的文件夹中新建m ...

  3. Qt Qwdget 汽车仪表知识点拆解4 另类进度条实现

    先贴上效果图,注意,没有写逻辑,都是乱动的 注意看一下,右面的这两个进度条,有瑕疵,就是我没有把图片处理干净,这里犹豫我不知道这个具体的弧度,也没法绘制,就偷懒了 现在上面放一个UI,把两个进度条抠空 ...

  4. mysql修改外部访问权限

    mysql>use mysql; mysql>update user set host =’%’ where user=’root’ mysql>select host,user f ...

  5. 问题 A: 分数矩阵

    题目描述 我们定义如下矩阵:1/1 1/2 1/31/2 1/1 1/21/3 1/2 1/1矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增.请求出这个矩阵的总和. 输入 输入包含多组测 ...

  6. 学习bash——环境配置

    一.环境配置文件的重要性 Bash在启动时直接读取这些配置文件,以规划好bash的操作环境. 即使注销bash,我们的设置仍然保存. 二.login shell 通过完整的登录流程取得的bash,称为 ...

  7. Alpha项目冲刺(团队作业5)

    团队成员 组 员 学号 朱世杰 211414141 曹晔宁 211306302 一.冲刺(7次 Scrum) [Alpha版本]冲刺阶段--Day 1 [Alpha版本]冲刺阶段--Day 2 [Al ...

  8. Linux SPI总线和设备驱动架构之一:系统概述

    SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器.传感器.存储设备,SPI设备分为主设备和从设备两种,用 ...

  9. lintcode-47-主元素 II

    47-主元素 II 给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一. 注意事项 数组中只有唯一的主元素 样例 给出数组[1,2,1,2,1,3,3] 返回 1 挑战 ...

  10. VS2015中常用快捷键的修改推荐

    首先,在VS2015中修改快捷键的步骤如下: 工具--选项--环境--键盘. 如图: 然后就是修改快捷键:(以下是个人的使用习惯,仅供参考) 1.编辑.设置选定内容的格式.设置为ctrl+E,Ctrl ...