当前位置: 首页 > news >正文

间谍网络(tarjan缩点)

洛谷传送门


看着这道题给人感觉就是tarjan求SCC,然而还得判断是否能控制全部间谍,这就得先从可以贿赂的点dfs一遍。

如果没有全部被标记了,就输出NO,再从没被标记的点里找最小的标号。

如果全被标记,就输出YES,再从入度为0的缩点里找最小的价格,加到ans中,最后输出ans。

——代码

 

  1 #include <cstdio>
  2 #include <stack>
  3 #include <cstring>
  4 
  5 using namespace std;
  6 
  7 int n, p, r1, cnt, idx, ans = 30000001, minn;
  8 int a[3001], next[8001], to[8001], head[3001], low[3001], dfn[3001], belong[3001], r[3001];
  9 bool ins[3001], vis[3001], mey[3001];
 10 stack <int> s;
 11 
 12 inline void add(int x, int y)
 13 {
 14     to[cnt] = y;
 15     next[cnt] = head[x];
 16     head[x] = cnt++;
 17 }
 18 
 19 void dfs(int u)
 20 {
 21     int i, v;
 22     vis[u] = 1;
 23     mey[u] = 1;
 24     for(i = head[u]; i != -1; i = next[i])
 25     {
 26         v = to[i];
 27         if(!vis[v]) dfs(v);
 28     }
 29 }
 30 
 31 void tarjan(int u)
 32 {
 33     low[u] = dfn[u] = ++idx;
 34     s.push(u);
 35     ins[u] = 1;
 36     int i, v;
 37     for(i = head[u]; i != -1; i = next[i])
 38     {
 39         v = to[i];
 40         if(!dfn[v])
 41         {
 42             tarjan(v);
 43             low[u] = min(low[u], low[v]);
 44         }
 45         else if(ins[v]) low[u] = min(low[u], dfn[v]);
 46     }
 47     if(low[u] == dfn[u])
 48     {
 49         cnt++;
 50         do
 51         {
 52             v = s.top();
 53             s.pop();
 54             ins[v] = 0;
 55             belong[v] = cnt;
 56         }while(u != v);
 57     }
 58 }
 59 
 60 int main()
 61 {
 62     int i, j, k, x, y, u, v;
 63     scanf("%d %d", &n, &p);
 64     for(i = 1; i <= p; i++)
 65     {
 66         scanf("%d", &x);
 67         scanf("%d", &a[x]);
 68     }
 69     memset(head, -1, sizeof(head));
 70     scanf("%d", &r1);
 71     for(i = 1; i <= r1; i++)
 72     {
 73         scanf("%d %d", &x, &y);
 74         add(x, y);
 75     }
 76     for(i = 1; i <= n; i++)
 77      if(!vis[i] && a[i])
 78       dfs(i);
 79     for(i = 1; i <= n; i++)
 80      if(!mey[i])
 81       ans = min(ans, i);
 82     if(ans != 30000001)
 83     {
 84         printf("NO\n%d", ans);
 85         return 0;
 86     }
 87     cnt = 0;
 88     for(i = 1; i <= n; i++)
 89      if(!dfn[i])
 90       tarjan(i);
 91     for(u = 1; u <= n; u++)
 92      for(i = head[u]; i != -1; i = next[i])
 93      {
 94          v = to[i];
 95          if(belong[u] != belong[v]) r[belong[v]]++;
 96      }
 97     ans = 0;
 98     for(i = 1; i <= cnt; i++)
 99      if(r[i] == 0)
100      {
101          minn = 30000001;
102          for(j = 1; j <= n; j++)
103           if(belong[j] == i && a[j])
104            minn = min(minn, a[j]);
105          ans += minn;
106      }
107     printf("YES\n%d", ans);
108     return 0;
109 }
View Code

 

转载于:https://www.cnblogs.com/zhenghaotian/p/6686375.html

相关文章:

  • 测试工程师的明天在哪里
  • 【php技术】PHP错误类型和屏蔽方法
  • JAVA进程占用CPU分析
  • Android - Activity生命周期
  • maven scope使用和理解
  • JavaScript数组
  • freemarker自定义标签
  • [转]使用JQuery读取XML文件数据
  • android安装
  • jQuery 读xml并search
  • IO模型介绍 以及同步异步阻塞非阻塞的区别
  • IDEA的查询引用、调用关系图的功能(转)
  • 【不抱怨21天】第一天 - The First Day
  • 201521123054《Java程序设计》第8周学习总结
  • DataTable与Xml的相互转化
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • angular组件开发
  • Babel配置的不完全指南
  • Cumulo 的 ClojureScript 模块已经成型
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Joomla 2.x, 3.x useful code cheatsheet
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • windows下如何用phpstorm同步测试服务器
  • 分布式任务队列Celery
  • 构建二叉树进行数值数组的去重及优化
  • 看域名解析域名安全对SEO的影响
  • 如何设计一个比特币钱包服务
  • 三分钟教你同步 Visual Studio Code 设置
  • 跳前端坑前,先看看这个!!
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #if 1...#endif
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (三)终结任务
  • (未解决)macOS matplotlib 中文是方框
  • (循环依赖问题)学习spring的第九天
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)nsfocus-绿盟科技笔试题目
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 常见的偏门问题
  • .net 托管代码与非托管代码
  • .NET学习全景图
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BZOJ]4817: [Sdoi2017]树点涂色