传送门: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. NoSQL简单学习(一)

    只是简单的知道有这个东西,却从来没有去接触,今天看了几篇文章,记录一下,开始慢慢接触这一领域 简介: 8种Nosql数据库系统对比 http://blog.jobbole.com/1344/ 一网打尽 ...

  2. 不用找了,比较全的signalR例子已经为你准备好了(2)---JqGrid 服务端刷新方式-注释详细-DEMO源码下载

    上次用客户端进行数据刷新的方式,和官方的Demo实现存在差异性,今天花了一点时间好好研究了一下后台时时刷新的方式.将写的代码重新update了一次,在这之前找过好多的资料,发现都没有找到好的例子,自己 ...

  3. Windows下nginx作为静态资源服务器使用

    一.Nginx下载与安装 1.nginx官方下载地址:http://nginx.org/ 2.下载完后将压缩包解压即可 3.nginx配置文件为根目录下conf\nginx.conf 二.Nginx常 ...

  4. LuffyCity-CMDB实战

    第1章 章节一 课时01-ITIL介绍 课时02-CMDB介绍 课时03-CMDB需求讨论 课时04-CMDB需求讨论2 课时05-CMDB表结构设计 课时06-CMDB表结构设计2 课时07-CMD ...

  5. 孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2

    孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步 ...

  6. 配置SSH无密钥登陆(三)

    配置SSH无密钥登陆 (1).关闭防火墙 对每个虚拟机进行如下操作:   su    chkconfig  iptables  off 执行之后重启虚拟机:reboot (2).关闭之后,在maste ...

  7. 当因式分解遇见近邻:一种多层面协同过滤模型(SVD++)

    本文地址:https://www.cnblogs.com/kyxfx/articles/9392086.html actorization Meets the Neighborhood: a Mult ...

  8. 树莓派初次使用的基本配置.md

    记录了一下树莓派初次使用的配置过程,包括装系统.修改 IP 等等. 树莓派(英语:Raspberry Pi),是一款基于 Linux 的单板机电脑. 它由英国的树莓派基金会所开发,目的是以低价硬件及自 ...

  9. UnrealEngine4入门(一) 新建一个c++项目

    epic games宣布ue4免费使用(游戏发布之后,每个季度大于3000美元则收取收益的5%)之后,吸引了大批看好VR和AR前景的游戏开发者.不过国内(中文)ue4教程和资料太少,而且一大部分资料都 ...

  10. hdu 3231 Box Relations (拓扑排序)

    Box Relations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...