题目描述

给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1。对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 $k$ 的最短路与 $j$ 到 $k$ 的最短路之差为定值。求所有满足条件的点 $i$ 。

$n\le 100000,m\le 200000$


题解

结论题+Hash

结论:$i$ 满足条件,当且仅当满足三个条件之一:

1. 点 $i$ 的度数为1;
2. 点 $i$ 与一个度数为1的点相连;
3. 存在某个点 $j$ ,使得 $i$ 与 $j$  和所有除 $i,j$ 以外的点是否有边 相同。

证明参考 这里

对于条件1、2很容易判断。

对于3条件我们可以将所有与 $i$ 点相连的点Hash一下即可判断出 $i$ 与 $j$ 没有边的 $j$ 。

再把 $i$ 自己加进去Hash一下即可判断书 $i$ 与 $j$ 有边的 $j$ 。

其中Hash的模数要设成 $10^{18}$ 级别。

时间复杂度为使用map判断的 $O(m+n\log n)$

#include <map>
#include <cstdio>
#include <cstdlib>
#define N 100010
using namespace std;
typedef long long ll;
map<ll , int> mp1 , mp2;
int px[N << 1] , py[N << 1] , c[N] , flag[N] , ans[N];
ll v[N] , a[N] , b[N];
int main()
{
srand(20011011);
int T;
scanf("%d" , &T);
while(T -- )
{
mp1.clear() , mp2.clear();
int n , m , i , tot = 0;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= n ; i ++ ) v[i] = a[i] = ((ll)rand() << 45) + ((ll)rand() << 30) + (rand() << 15) + rand() , flag[i] = c[i] = b[i] = 0;
for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &px[i] , &py[i]) , c[px[i]] ++ , c[py[i]] ++ ;
for(i = 1 ; i <= m ; i ++ )
{
if(c[px[i]] == 1) flag[py[i]] = 1;
if(c[py[i]] == 1) flag[px[i]] = 1;
a[px[i]] ^= v[py[i]] , b[px[i]] ^= v[py[i]];
a[py[i]] ^= v[px[i]] , b[py[i]] ^= v[px[i]];
}
for(i = 1 ; i <= n ; i ++ ) mp1[a[i]] ++ , mp2[b[i]] ++ ;
for(i = 1 ; i <= n ; i ++ )
if(c[i] == 1 || flag[i] || mp1[a[i]] > 1 || mp2[b[i]] > 1)
ans[++tot] = i;
printf("%d\n" , tot);
for(i = 1 ; i <= tot ; i ++ ) printf("%d " , ans[i]);
puts("");
}
return 0;
}

【uoj#175】新年的网警 结论题+Hash的更多相关文章

  1. uoj175 【Goodbye Yiwei】新年的网警

    题目 胡乱分析 不妨定谣言的源头得到谣言的时刻为\(1\),那么其他人听到谣言的时间就是源头到这个点的最短路 假设\(i\)是谣言的源头,那么如果存在一个点\(j\)满足\(\forall k\in[ ...

  2. 【uoj#282】长度测量鸡 结论题

    题目描述 给出一个长度为 $\frac{n(n+1)}2$ 的直尺,要在 $0$ 和 $\frac{n(n+1)}2$ 之间选择 $n-1$ 个刻度,使得 $1\sim \frac{n(n+1)}2$ ...

  3. 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组

    题目描述 给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ .问是否能将 $A$ 交换成 $B$ . 输入 ...

  4. [codevs5578][咸鱼]tarjan/结论题

    5578 咸鱼  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都 ...

  5. BZOJ_1367_[Baltic2004]sequence_结论题+可并堆

    BZOJ_1367_[Baltic2004]sequence_结论题+可并堆 Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 ...

  6. [BZOJ3609][Heoi2014]人人尽说江南好 结论题

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.     在过去,人们是要 ...

  7. 【bzoj4401】块的计数 结论题

    题目描述 给出一棵n个点的树,求有多少个si使得整棵树可以分为n/si个连通块. 输入 第一行一个正整数N,表示这棵树的结点总数,接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相 ...

  8. 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp

    题目描述 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...

  9. [UOJ#351]新年的叶子

    [UOJ#351]新年的叶子 试题描述 躲过了AlphaGo 之后,你躲在 SingleDog 的长毛里,和它们一起来到了AlphaGo 的家.此时你们才突然发现,AlphaGo 的家居然是一个隐藏在 ...

随机推荐

  1. C语言学习笔记1

    C语言假期学习笔记1 关于吃回车问题 第一个解决方案是使用ch=getchar(); 第二个方案是在scanf(" %c",&b):在%c加空格,将存于缓冲区的回车符读入 ...

  2. 【HNOI2014】世界树

    题面 题解 虚树好题(只是细节太多) 构出虚树后,一定要仔细梳理关键点之间的点是上面属于父亲,下面属于儿子. 然后二分出所有的点的所属就可以了 代码 #include<cstdio> #i ...

  3. 使用装饰器@property

    1.在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 98s.score = 1000 # 属性 ...

  4. Maven学习(十六)-----Maven插件

    Maven插件 Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的.Maven 插件通常用于: 创建 jar 文件 创建 war 文件 编译代码文件 进行代码单元测试 创建项目文档 创建 ...

  5. hexo部署

    title: hexo 部署(一) date: 2018-09-16 18:01:26 tags: hexo部署配置 categories: 博客搭建 hexo博客搭建 折腾了好久的时间,终于使用he ...

  6. 3星|麦肯锡合伙人《从1到N》:PPT讲稿,图表不错,讲解不够深入

    从1到N:企业数字化生存指南 两位作者是麦肯锡合伙人.全书插图比较多,图做的还比较有水平.但是相关文字不够深入,我读后的感觉是:图表不是两位执笔者做的,他们对细节不清楚,对图表涉及到的行业也缺乏深入的 ...

  7. AndroidArchitecture

    title: AndroidArchitecture date: 2016-04-08 23:26:20 tags: [architecture] categories: [Mobile,Androi ...

  8. Python基础知识-06-集合内存布尔False

    python其他知识目录 1.判断一个字符串中是否有敏感字符? #str: m_str="我叫魔降风云变" if "魔" in m_str: #判断指定字符是否 ...

  9. Scrum立会报告+燃尽图(Beta阶段第四次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386 项目地址:https://coding.net/u/wuyy694 ...

  10. mysql数据库工具

    1.navicat12 中文版及破解 链接:https://pan.baidu.com/s/1TH8m6lduHJybUGhmjFPIAA 提取码:kwcd 2.旧版本mysql-front(连接可选 ...