【离散化】【DFS】Gym - 101617H - Security Badges
题意:给你一张有向图,每条边有个限制范围,只有权值在限制范围内的人能走这条边,问你权值不超过K的人中,有多少人能从S到T。
K很大,因此我们只处理边的范围的上下界这O(m)个权值能否到达,以防万一,还处理了这些权值+1、-1的可达性。然后去重。离散化出来的这些区间中,两个端点都可达的话,其内部的点也必然可达。当然端点本身也是可达的。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
set<int>S;
bool cant[5005],vis[1005];
int first[1005],nex[5005],v[5005],w1[5005],w2[5005],e;
void AddEdge(int U,int V,int W1,int W2){
v[++e]=V;
w1[e]=W1;
w2[e]=W2;
nex[e]=first[U];
first[U]=e;
}
int n,m,K,Sta,End,b[30005],q;
bool c[30005];
void dfs(int U){
vis[U]=1;
for(int i=first[U];i;i=nex[i]){
if(!cant[i] && !vis[v[i]]){
dfs(v[i]);
}
}
}
void Insert(int x){
if(S.find(x)==S.end()){
b[++q]=x;
S.insert(x);
}
}
int main(){
int x,y,z1,z2;
//freopen("h.in","r",stdin);
scanf("%d%d%d%d%d",&n,&m,&K,&Sta,&End);
for(int i=1;i<=m;++i){
scanf("%d%d%d%d",&x,&y,&z1,&z2);
AddEdge(x,y,z1,z2);
if(z1!=1){
Insert(z1-1);
}
Insert(z1);
if(z1!=K){
Insert(z1+1);
} if(z2!=1){
Insert(z2-1);
}
Insert(z2);
if(z1!=K){
Insert(z2+1);
}
}
sort(b+1,b+q+1);
/*for(int i=1;i<=q;++i){
printf("%d ",b[i]);
}
puts("");*/
int ans=0;
for(int i=1;i<=q;++i){
memset(cant,0,sizeof(cant));
for(int j=1;j<=e;++j){
if(b[i]<w1[j] || b[i]>w2[j]){
cant[j]=1;
}
}
memset(vis,0,sizeof(vis));
dfs(Sta);
if(vis[End]){
c[i]=1;
++ans;
}
}
/*for(int i=1;i<=q;++i){
if(c[i]){
printf("%d ",b[i]);
}
}
puts("");*/
for(int i=1;i<q;++i){
if(c[i] && c[i+1]){
ans+=(b[i+1]-b[i]-1);
}
}
printf("%d\n",ans);
return 0;
}
【离散化】【DFS】Gym - 101617H - Security Badges的更多相关文章
- hdu4605 树状数组+离散化+dfs
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Aizu 0531 "Paint Color" (坐标离散化+DFS or BFS)
传送门 题目描述: 为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌. 三合板上不需要涂色的部分预先贴好了护板. 被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编写一个程序计 ...
- dfs | Security Badges
Description You are in charge of the security for a large building, with n rooms and m doors between ...
- 2016 长春东北赛---Coconuts(离散化+DFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...
- UVALive 6663 Count the Regions --离散化+DFS染色
题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...
- hdu 4358 Boring counting 离散化+dfs序+莫队算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...
- (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting
题目传送门 题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次. 分析:首先要对权值离散化,然后要将树形转换为线形,配上图:.然后按照右端点从小到大 ...
- DFS Gym 100553J Jokewithpermutation
题目传送门 /* 题意:将字符串分割成一个全排列 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 DFS还是写不来,难道是在家里懒? */ #inclu ...
- UvaLive 6663 Count the Regions 离散化+DFS
链接:http://vjudge.net/problem/viewProblem.action?id=49408 题意:在平面内给出若干个矩形,求出它们能将整个平面分成多少份. 思路:刚開始一眼看到认 ...
随机推荐
- 设计模式之Composite
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) Composite定义? 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构. 想到Compo ...
- 安装node-sass的正确姿势【转】
安装 node-sass 的时候总是会各种不成功,今天我琢磨了一会儿总算知道要怎么解决了. 首先要知道的是,安装 node-sass 时在 node scripts/install 阶段会从 gith ...
- Android稳定性测试工具Monkey的使用
综述 Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中.它可以发送一些伪随机的用户事件流,例如点击.触摸.手势等.我们能够使用Monkey工具来对我们所开发的应用进行压力测试. ...
- http://www.onvif.org/onvif/ver20/util/operationIndex.html
http://www.onvif.org/onvif/ver20/util/operationIndex.html
- redis基础之redis-sentinel(哨兵集群)(六)
前言 redis简单的主从复制在生产的环境下可能是不行的,因为从服务器只能读不能写,如果主服务器挂掉,那么整个缓存系统不能写入了:redis自带了sentinel(哨兵)机制可以实现高可用. redi ...
- Arm-kernel 内存收集【转】
转自:http://blog.csdn.net/linyt/article/details/6627664 Linux kernel的内存管理子系统非常复杂,为了深入了解内存管理系统,我打算分多篇文章 ...
- 大端小端转换,le32_to_cpu 和cpu_to_le32
字节序 http://oss.org.cn/kernel-book/ldd3/ch11s04.html 小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台 ...
- 问题解决:The content of the adapter has changed but ListView did not receive a notification
1. 不要在后台线程中直接调用adapter 2. 不要在后台线程中修改adapter绑定的数据 如果对adapter或者adapter绑定的数据是在线程中,加上runOnUiThread就可以了 r ...
- 数学中的Sin和Cos是什么意思?(转)
数学中的Sin和Cos是什么意思? 作者:admin 分类:生活随笔 发表于 2012年03月21日 16:48 问:数学中的Sin和Cos是什么意思? 答:sin, cos, tan 都是三角函数, ...
- mysql 数据库备份及恢复
1.备份 # 导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -–add-drop-table -uusername -ppassword da ...