双拓扑排序 HDOJ 5098 Smart Software Installer

 

题目传送门

  1 /*
  2     双拓扑排序:抄的,以后来补
  3     详细解释:http://blog.csdn.net/u012774187/article/details/40736995
  4 */
  5 #include <cstdio>
  6 #include <algorithm>
  7 #include <iostream>
  8 #include <sstream>
  9 #include <cstring>
 10 #include <cmath>
 11 #include <string>
 12 #include <vector>
 13 #include <queue>
 14 #include <map>
 15 #include <set>
 16 #include <ctime>
 17 #include <cstdlib>
 18 using namespace std;
 19 
 20 #define lson l, mid, rt << 1
 21 #define rson mid + 1, r, rt << 1 | 1
 22 typedef long long ll;
 23 
 24 const int MAXN = 1e3 + 10;
 25 const int INF = 0x3f3f3f3f;
 26 const double PI = acos (-1.0);
 27 const double EPS = 1e-9;
 28 struct Edge
 29 {
 30     int v, nxt;
 31 }e[MAXN * MAXN];
 32 int in[MAXN], out[MAXN];
 33 int re[MAXN], head[MAXN];
 34 bool vis[MAXN];
 35 map<string, int> M;
 36 vector<int> G[MAXN];
 37 int ecnt, cnt;
 38 
 39 int TopoSort(void)
 40 {
 41     queue<int> Q1, Q2;        //Q1 !re Q2 re
 42     for (int i=1; i<=cnt; ++i)
 43     {
 44         if (!in[i])
 45         {
 46             if (!re[i])    Q1.push (i);
 47             else    Q2.push (i);
 48         }
 49     }
 50 
 51     int ans = 0;
 52     while (!Q1.empty () || !Q2.empty ())
 53     {
 54         if (Q1.empty () && !Q2.empty ())        //重启
 55         {
 56             ans++;
 57             while (!Q2.empty ())        //所有都重启安装
 58             {
 59                 Q1.push (Q2.front ());    Q2.pop ();
 60             }
 61         }
 62         while (!Q1.empty ())
 63         {
 64             int u = Q1.front ();    Q1.pop ();
 65             vis[u] = true;
 66             for (int i=head[u]; i!=-1; i=e[i].nxt)
 67             {
 68                 int v = e[i].v;
 69                 if (!(--in[v]))
 70                 {
 71                     if (!re[v])    Q1.push (v);
 72                     else Q2.push (v);
 73                 }
 74             }
 75         }
 76     }
 77 
 78     return ans;
 79 }
 80 
 81 void init(void)
 82 {
 83     M.clear ();
 84     ecnt = cnt = 0;
 85     memset (in, 0, sizeof (in));
 86     memset (out, 0, sizeof (out));
 87     memset (re, 0, sizeof (re));
 88     memset (head, -1, sizeof (head));
 89     memset (vis, false, sizeof (vis));
 90 }
 91 
 92 void add_edge(int u, int v)
 93 {
 94     e[ecnt].nxt = head[u];
 95     e[ecnt].v = v;
 96     head[u] = ecnt++;
 97 }
 98 
 99 int main(void)        //HDOJ 5098 Smart Software Installer
100 {
101     //freopen ("I.in", "r", stdin);
102 
103     string s;
104     char name[1050];
105     int n, cas = 0;    scanf ("%d", &n);    getchar (); getchar ();
106     while (n--)
107     {
108         init ();
109         while (getline (cin, s))
110         {
111             if (s[0] == '\0')    break;
112             istringstream sin (s);
113             sin >> name;
114             int len = strlen (name);    int flag = 0;
115             if (name[len-2] == '*')    {flag = 1;    name[len-2] = '\0';}
116             else name[len-1] = '\0';
117 
118             string u = name, v;
119             if (M.find (u) == M.end ())
120                 M[u] = ++cnt;
121             re[M[u]] = flag;
122 
123             while (sin >> v)
124             {
125                 if (M.find (v) == M.end ())
126                     M[v] = ++cnt;
127                 add_edge (M[v], M[u]);
128                 out[M[v]]++;
129                 in[M[u]]++;
130             }
131         }
132         printf ("Case %d: %d\n", ++cas, TopoSort ());
133     }
134 
135     return 0;
136 }
137 
138 /*
139 Case 1: 1
140 Case 2: 2
141 */

 

转载于:https://www.cnblogs.com/Running-Time/p/4523295.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net matlab,ASP.NET与MATLAB混合编译以及数据传递【更新中】

本帖最后由 yinbo20081314 于 2015-5-20 00:35 编辑在VS环境的项目中&#xff0c;首先需要引用以下dll才能开启MATLAB混编。【引用1】MatlabApplication(Version 8.1) Type Library 1.0a1.jpg (42.85 KB, 下载次数: 9)2015-5-20 00:16 上传【引用2】在MATLAB安装地址下可以找到…

01背包 模板1 2 总结

物品质量 w[0] w[1] w[2] ....... w[n] 背包容量c T 物品价值 v[0] v[1] v[2] ....... v[n] 物品种类 n N &#xff08;一&#xff09;设DP(x,y) 表示 从前x项物品中 取出装入 体积为y的背包 的 物品的最…

Cling旨在提供一款高性能的C++ REPL

Cling是一款交互式C解释器&#xff0c;以LLVM和Clang为基础构建&#xff0c;其目标是通过超越编码-编译-运行-调试这个惯常的C工作流程提供生产力的飞跃。\\Cling提供了一个读取-求值-输出循环&#xff08;REPL&#xff09;&#xff0c;类似常见的Unix shell&#xff0c;并支持…

8月12号=》391页-395页

14.10  使用document对象 document对象既是HTMLDocument类的一个实例&#xff0c;也是DHTML模型中的一个对象。该对象除了可以使用标准DOM模型 的方法之外&#xff0c;还可以使用它如下几个常用方法。 close()&#xff1a;结束一个通过open方法打开的document对象。 open()&a…

matlab暂停音频,matlab 中的实时音频

matlab 中的实时音频音频系统工具箱™针对实时音频处理进行了优化. audioDeviceReader, audioDeviceWriter, audioPlayerRecorder,dsp.AudioFileReader 和 dsp.AudioFileWriter 器是为流式传输多通道音频而设计的, 它们提供了必要的参数, 以便您可以在吞吐量和延迟之间进行权衡…

js数组操作

2019独角兽企业重金招聘Python工程师标准>>> 1、数组的创建 var arrayObj new Array(); //创建一个数组 var arrayObj new Array([size]); //创建一个数组并指定长度&#xff0c;注意不是上限&#xff0c;是长度 var arrayObj new Array([element0[, element1[…

ubuntu php zip 安装教程,Ubuntu安装zip解压软件

如果没安装&#xff1a;C/C Code复制内容到剪贴板sudo apt-get install unzipsudo apt-get install zip或者&#xff1a;C/C Code复制内容到剪贴板yum install zipyum install unzip【解压.zip文件】Ubuntu中貌似已经安装了unzip软件&#xff0c;解压命令如下&#xff1a;PHP C…

[hackerrank]Manasa and Stones

https://www.hackerrank.com/contests/w2/challenges/manasa-and-stones 简单题。 #include<iostream> using namespace std;int main() {int T;cin >> T;while (T--) {int n, a, b;cin >> n >> a >> b;// a < bif ( a > b) {int tmp a;a…

PHP--字符串处理函数

字符串的声明 1、 2、 3、 【注】单引号与双引号声明字符串的区别&#xff1a; 1、strlen():获取字符串长度 2、substr():截取字符串 3、strpos():查找字符串在指定字符串中的位置 4、str_replace():字符串替换 字符串与数组的转化函数 1、explode():字符串转化为数组 2、implo…

vue php 文件上传,使用vue.js和laravel上传文件

我尝试在vue.js和laravel中上传pdf文件&#xff0c;files_array是这样定义的:data(){return {formData: new Form ({files_array:,...这是一个文件选择函数:selectFile(e) {let pdfFile e.target.files[0];this.formData.files_array pdfFile;}上传功能:const header {Conten…

用webstorm自动编译less产出css和sourcemap

css产出sourcemap有什么用呢&#xff0c;可能大家要问这个问题了。 请移步这里 https://developers.google.com/chrome-developer-tools/docs/css-preprocessors?hlzh-CN 在chrome中我们通过sourcemap可以直接调试less源文件文件&#xff0c;这是一个非常强大的功能。 下面由我…

远近旋转球体

2019独角兽企业重金招聘Python工程师标准>>> static int day 20; void mydisplay(void) {int a clock();glEnable(GL_DEPTH_TEST);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空颜色缓存与深度缓存glMatrixMode(GL_PROJECTION);//接下来要进行的操作…

matlab里数组的赋值,arrays – MATLAB结构赋值数组

我有一系列结构.让我们说s(1).value,…,s(5).value.我有一个值向量,让我们说vals [1 2 3 4 5],我想分配给结构数组.所以用伪代码写我想要&#xff1a;s(:).value vals.如下所示,有一个已知的解决方案.但是真的不可能像在伪代码中那样在1行中进行这个赋值吗&#xff1f;% Vect…

Linux(CentOS)挂载NTFS格式的U盘、移动硬盘

以下操作均在root下执行的 1.U盘挂载 mkdir /mnt/usb //创建一个目录&#xff0c;用于挂载U盘 fdisk -l //查看系统中挂载的U盘&#xff0c;若系统有一块硬盘sdb1 代表你的U盘&#xff0c;/dev/sdb1表明机 器已识别U盘&#xff0c; mount /dev/sdb1 /mnt/usb //把U盘/dev/sdb1挂…

iOS开发UI篇—CALayer简介

一、简单介绍在iOS中&#xff0c;你能看得见摸得着的东西基本上都是UIView&#xff0c;比如一个按钮、一个文本标签、一个文本输入框、一个图标等等&#xff0c;这些都是UIView。 其实UIView之所以能显示在屏幕上&#xff0c;完全是因为它内部的一个图层&#xff0c;在创建UIVi…

EXCEL使用技巧

Excel: 1、隔行变色|菜单->条件格式->其它规则->使用公式->"MOD(ROW(),2)0" 2、查找包含特定字符的单元格&#xff0c;并替换整个单元格 Sub FindAndReplace()Dim i As IntegerWith Range("G23:G25") 指定替换范围For i 1 To .Cells.CountIf …

Cisco 3560 配置DHCP Relay实例

网络环境&#xff1a;一台3560交换机&#xff0c;划分三个vlan,vlan2为服务器所在网络&#xff0c;命名为server,IP地址段为192.168.2.0,子网掩码:255.255.255.0,网关:192.168.2.1,域服务器为windows2000advanceserver,同时兼作DHCP服务器&#xff0c;DNS服务器&#xff0c;IP地…

php 多进程 常驻内存,PHP 多进程与信号中断实现多任务常驻内存管理 [Master/Worker 模型]...

本文章基于pcntl扩展做的多进程测试。进程调度策略父子进程的调度由操作系统来负责&#xff0c;具体先调度子进程还是父进程由系统的调度算法决定&#xff0c;当然可以在父进程加上延时或是调用进程回收函数pcntl_wait可以先让子进程先运行&#xff0c;进程回收的目的是释放进程…

LINQ to JavaScript

JSLINQ 是一个将LINQ对象转化为JavaScript对象的工具 。它是构建在JavaScript的数组对象的基础上进行转换的&#xff0c;如果您使用的是一个数组&#xff0c;你可以使用LINQ到javascript 。 示例&#xff1a; var myList [ {FirstName:"Chris",LastName:…

php 可维护性的代码,软件的可复用性和可维护性

一、软件的可复用性可复用性(Reuseability)复用又叫重用&#xff0c;是重复使用的意思。一般软件的复用率并不高&#xff0c;尤其在国内。复用的好处可以得到 较高的生产效率以及随之而来的成本降低、较高的软件质量(错误可以更快的被纠正)以及 恰当的使用复用可以改善系统的可…