题目

胡乱分析

不妨定谣言的源头得到谣言的时刻为\(1\),那么其他人听到谣言的时间就是源头到这个点的最短路

假设\(i\)是谣言的源头,那么如果存在一个点\(j\)满足\(\forall k\in[1,n],k\neq i,k\neq j,dis_{i,k}=dis_{j,k}\);那么\(i\)只需要说他听到谣言的时间为\(dis_{i,j}\),就无法判断\(i,j\)哪一个是谣言的源头了

这个\(\forall k\in[1,n],k\neq i,k\neq j,dis_{i,k}=dis_{j,k}\)条件看起来不是很好做,但是由于这张图的边权都是\(1\),只需要\(i\)和\(j\)第一遍松弛的点相同,即和\(i,j\)直接相连的点相同,跑出来的最短路就一定相同

于是我们只需要对每个点维护一下与其直接相连的点集,判断两个点集是否相等自然可以直接hash一波

之后收获了大零蛋的好成绩

进一步胡乱分析发现,如果一个点的度数为\(1\)或者与度数为\(1\)的点相连,那么这个点也无法被确定为嫌疑人

当度数为\(1\)的点的人为源头时,他只需要说他收到谣言的时间为\(3\),就无法确定这个点和与他相连的点哪一个是真正的源头;反之同理。

代码

  1. #include<bits/stdc++.h>
  2. #include<tr1/unordered_map>
  3. #define re register
  4. #define uint unsigned long long
  5. using namespace std::tr1;
  6. inline int read() {
  7. char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
  8. while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
  9. }
  10. const int maxn=1e5+5;
  11. uint base=200019;
  12. unordered_map<uint,int> ma[2];
  13. std::vector<int> v[maxn],d[maxn];
  14. uint ha[2][maxn];int n,m,vis[maxn],dg[maxn];
  15. inline void add(int x,int y) {
  16. v[x].push_back(y),v[y].push_back(x);
  17. d[x].push_back(y),d[y].push_back(x);
  18. dg[x]++,dg[y]++;
  19. }
  20. int main() {
  21. int T=read();
  22. while(T--) {
  23. for(re int i=1;i<=n;i++) v[i].clear(),d[i].clear(),ha[0][i]=ha[1][i]=0,dg[i]=0;
  24. n=read(),m=read(); ma[0].clear(),ma[1].clear();
  25. for(re int x,y,i=1;i<=m;i++)
  26. x=read(),y=read(),add(x,y);
  27. for(re int i=1;i<=n;i++) {
  28. d[i].push_back(i);
  29. std::sort(v[i].begin(),v[i].end());
  30. std::sort(d[i].begin(),d[i].end());
  31. for(re int j=0;j<v[i].size();++j)
  32. ha[0][i]=ha[0][i]*base+v[i][j];
  33. ma[0][ha[0][i]]++;
  34. for(re int j=0;j<d[i].size();++j)
  35. ha[1][i]=ha[1][i]*base+d[i][j];
  36. ma[1][ha[1][i]]++;
  37. }
  38. int ans=0;
  39. for(re int i=1;i<=n;i++) if(dg[i]==1||ma[0][ha[0][i]]>1||ma[1][ha[1][i]]>1) vis[i]=T+1,++ans;
  40. for(re int i=1;i<=n;i++)
  41. if(vis[i]!=T+1) {
  42. for(re int j=0;j<v[i].size();j++)
  43. if(dg[v[i][j]]==1) {vis[i]=T+1;++ans;break;}
  44. }
  45. printf("%d\n",ans);
  46. for(re int i=1;i<=n;i++) if(vis[i]==T+1) printf("%d ",i);puts("");
  47. }
  48. return 0;
  49. }

uoj175 【Goodbye Yiwei】新年的网警的更多相关文章

  1. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...

  2. Discuz网警过滤关键词库

    积累近几年discuz关键词过滤 使用方法:1.进入后台/内容/词语过滤批量添加.2.打开CensorWords.txt,复制里面的文本信息到批量添加的输入框内,点击确定即可.如图: 关键词下载:Ke ...

  3. 奇虎360诉腾讯QQ垄断案之我见(3Q大战之我见)

    这两款软件我都在用,要说时间最长感情最深的应该是腾讯QQ,1999年诞生的那年就在用QQ了! 不过感情归感情,个人看法归个人看法,不能用感情来判断. 正所谓外行看热闹,内行看门道.从事实上讲在使用这两 ...

  4. js判断checkbox状态,处理表单提交事件

    功能描述:手机网页需要一个投票功能,通过form的post提交.有5-20个checkbox选项,至少选一项,至多选三项.需要在用户点击提交按钮前,判断checkbox的状态是否符合条件,符合则提交到 ...

  5. 庭审全程文字实录 z

    备受关注的深圳快播公司涉黄案两日来在北京市海淀法院开庭审理,快播CEO王欣(微博).事业部总经理吴铭.事业部副总经理张克东.事业部副总经理兼市场部总监牛文举出庭接受审理. 面对传播淫秽物品牟利罪的指控 ...

  6. PC-大概最全的黑客工具表了

    纯真IP数据库查询程序 ­ remote administrator ­ (rar解密)ZiperelloV2.0 汉化版.zip ­ (代理跳板)SkSockServer1.09.zip ­ [ar ...

  7. 如何防范CC攻击

    服务器如何防范CC攻击CC攻击是DDOS(分布式拒绝服务)的一种,相比其它的DDOS攻击CC似乎更有技术含量一些.这种攻击你见不到虚假IP,见不到特别大的异常流量,但造成服务器无法进行正常连接,听说一 ...

  8. 骗子网站,X毛都没有,骗我九十九

    前言 这几天在A市和B市奔波着,眼瞅着自己就要毕业了,必须得出来找份工作了. 和小伙伴在A市兜兜转转了几天,要不就是不合适没下文,要不就是给了offer,工资是在太低.心很累,然后就下B市了,看看B市 ...

  9. 70后.net老猿,尚能饭否?

    程序猿的大限 距离上一次主动找工作,快到5年了,到现在的东家,是差不多3年前猎头挖过来的,而当时东家刚刚被欧洲一家有百年历史的跨国企业集团收购,所以我也就有幸成了一名“外企员工”,但是集团保留原东家人 ...

随机推荐

  1. flink-training-course

    目录 flink-training-course 大数据领域顶级盛会 Flink Forward Asia 2019 详情

  2. HDU 1577 WisKey的眼神

    WisKey的眼神 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. 安装gmpy2

    本来只想做个RSA的题,结果环境就搭了好久 首先想用 pip install gmpy2 发现缺东西,要安装gmp,mpfr,mpc 安装: mkdir -p $HOME/src mkdir -p $ ...

  4. LLppdd likes strings

    LLppdd's likes strings! Time Limit: 1 s Memory Limit: 256 MB 题目背景 LLppdd 由于实在是太弱了,在 \(ION 2018\) 模拟十 ...

  5. 【记录】解决uni-app 用nginx反向代理出现Invalid Host header问题

    之前解决过一次,后来给忘记了,今天又遇到这个问题,现记录一下 修改uni-app的manifest.json文件  - >源码视图 添加以下代码: "disableHostCheck& ...

  6. Linux运维常用脚本整理

    .查找当前目录下占用为0字节的文件并删除 find ./ -type f -size -exec rm -rf {}\;    #此命令不要用于对根目录0字节文件的操作 .将系统进程按内存占用大小排列 ...

  7. ab(http)与abs(https)压测工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...

  8. vue-cli脚手架工具新老版本安装对比

    1.老版本 Shift+鼠标右键 选择打开命令窗口 1.创建项目之前,需先确保本机已经安装node 在命令窗口中执行node -v npm -v   2.一般情况下用npm安装东西比较慢,可以使用淘宝 ...

  9. DB2数据库常用的函数总结

    CONCAT>>-CONCAT-------(--expression1--,--expression2--)--------------><功能:将两个字符串连接起来,如果两 ...

  10. 19.并发下的ArrayList、HashMap,Integer加锁问题

    import java.util.ArrayList; import java.util.Vector; /** * 并发下的ArrayList */ public class ArrayListMu ...