tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =)

主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了

  1. #include<map>
  2. #include<set>
  3. #include<cmath>
  4. #include<queue>
  5. #include<stack>
  6. #include<vector>
  7. #include<cstdio>
  8. #include<cassert>
  9. #include<iomanip>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define C 0.5772156649
  15. #define pi acos(-1.0)
  16. #define ll long long
  17. #define mod 1000000007
  18. #define ls l,m,rt<<1
  19. #define rs m+1,r,rt<<1|1
  20. #pragma comment(linker, "/STACK:1024000000,1024000000")
  21.  
  22. using namespace std;
  23.  
  24. const double g=10.0,eps=1e-;
  25. const int N=+,maxn=+,inf=0x3f3f3f;
  26.  
  27. stack<int>s;
  28. int ss[N],tt[N],d[N];
  29. int ins[N],inans[N];
  30. int dfn[N],low[N];
  31. int num,index;
  32. vector<int>v[N];
  33. int tarjan(int u)
  34. {
  35. ins[u]=;
  36. dfn[u]=low[u]=++index;
  37. s.push(u);
  38. for(int i=;i<v[u].size();i++)
  39. {
  40. int x=v[u][i];
  41. if(!dfn[x])
  42. {
  43. tarjan(x);
  44. low[u]=min(low[u],low[x]);
  45. }
  46. else if(ins[x]==)low[u]=min(low[u],dfn[x]);
  47. }
  48. if(dfn[u]==low[u])
  49. {
  50. ++num;
  51. while(!s.empty()){
  52. int k=s.top();
  53. s.pop();
  54. ins[k]=;
  55. inans[k]=num;
  56. if(k==u)break;
  57. }
  58. }
  59. }
  60. int main()
  61. {
  62. /* ios::sync_with_stdio(false);
  63. cin.tie(0);*/
  64. int n;
  65. scanf("%d",&n);
  66. memset(ins,,sizeof ins);
  67. memset(inans,,sizeof inans);
  68. memset(dfn,,sizeof dfn);
  69. memset(low,,sizeof low);
  70. while(!s.empty())s.pop();
  71. for(int i=;i<=*n;i++)v[i].clear();
  72. num=index=;
  73. for(int i=;i<=n;i++)
  74. {
  75. char S[],T[];
  76. scanf("%s%s%d",&S,&T,&d[i]);
  77. ss[i]=((int)(S[]-'')*+(int)(S[]-''))*+(int)(S[]-'')*+(int)(S[]-'');
  78. tt[i]=((int)(T[]-'')*+(int)(T[]-''))*+(int)(T[]-'')*+(int)(T[]-'');
  79. }
  80. for(int i=;i<=n;i++)
  81. {
  82. for(int j=i+;j<=n;j++)
  83. {
  84. if(min(ss[i]+d[i],ss[j]+d[j])>max(ss[i],ss[j]))
  85. {
  86. v[i].push_back(j+n);
  87. v[j].push_back(i+n);
  88. }
  89. if(min(ss[i]+d[i],tt[j])>max(ss[i],tt[j]-d[j]))
  90. {
  91. v[i].push_back(j);
  92. v[j+n].push_back(i+n);
  93. }
  94. if(min(tt[i],ss[j]+d[j])>max(tt[i]-d[i],ss[j]))
  95. {
  96. v[i+n].push_back(j+n);
  97. v[j].push_back(i);
  98. }
  99. if(min(tt[i],tt[j])>max(tt[i]-d[i],tt[j]-d[j]))
  100. {
  101. v[i+n].push_back(j);
  102. v[j+n].push_back(i);
  103. }
  104. }
  105. }
  106. for(int i=;i<=*n;i++)
  107. if(!dfn[i])
  108. tarjan(i);
  109. bool f=;
  110. for(int i=;i<=n;i++)
  111. if(inans[i]==inans[i+n])
  112. {
  113. f=;
  114. break;
  115. }
  116. if(f)puts("NO");
  117. else
  118. {
  119. puts("YES");
  120. for(int i=;i<=n;i++)
  121. {
  122. if(inans[i]<inans[i+n])printf("%02d:%02d %02d:%02d\n",ss[i]/,ss[i]%,(ss[i]+d[i])/,(ss[i]+d[i])%);
  123. else printf("%02d:%02d %02d:%02d\n",(tt[i]-d[i])/,(tt[i]-d[i])%,tt[i]/,tt[i]%);
  124. }
  125. }
  126. return ;
  127. }
  128. /********************
  129.  
  130. ********************/

poj3683 2 -sat输出路径的更多相关文章

  1. VS 工程的 输出路径和工作路径的区别

    输出路径,是vs编译项目生成可执行文件的路径:工作路径是环境变量,比如我们在程序中写相对路径,就是以这个路径为基础的.在默认情况下,输出路径和工作路径都不写的话,默认是程序的bin下面的debug或者 ...

  2. HD1385Minimum Transport Cost(Floyd + 输出路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  3. C++builder XE 安装控件 及输出路径

    C++builder XE 安装控件 与cb6不一样了,和delphi可以共用一个包. 启动RAD Studio.打开包文件. Project>Options>Delphi Compile ...

  4. HDU 1385 Minimum Transport Cost (最短路,并输出路径)

    题意:给你n个城市,一些城市之间会有一些道路,有边权.并且每个城市都会有一些费用. 然后你一些起点和终点,问你从起点到终点最少需要多少路途. 除了起点和终点,最短路的图中的每个城市的费用都要加上. 思 ...

  5. web项目Log4j日志输出路径配置问题

    问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...

  6. VJP1071新年趣事之打牌(背包+输出路径)

    简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 #include <iostream> #include<cstdio> #include<cs ...

  7. (poj)3414 Pots (输出路径的广搜)

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  8. Cmake 脚本对项目输出路径和输出头文件的路径定义

    对Lib项目的统一输出路径以下时解决方案: set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_O ...

  9. Part Acquisition(spfa输出路径)

    Part Acquisition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4080   Accepted: 1742 ...

随机推荐

  1. springmvc控制器controller单例问题

    springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次 ...

  2. 原!findbugs:NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE 和 OBL_UNSATISFIED_OBLIGATION

    改findbogs碰到的两个问题,一个是关于IO流,一个是关于空指针检查异常. 1.NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE 前面代码略... File crFil ...

  3. python创建一个线程和一个线程池

    创建一个线程 1.示例代码 import time import threading def task(arg): time.sleep(2) while True: num = input('> ...

  4. c++ 11nullptr

    1. 引入nullptr的原因 引入nullptr的原因,这个要从NULL说起.对于C和C++程序员来说,一定不会对NULL感到陌生.但是C和C++中的NULL却不等价.NULL表示指针不指向任何对象 ...

  5. java反射基础知识(三)

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...

  6. java调用操作系统命令

    java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...

  7. shell检查网络出现异常、僵尸进程、内存过低后,自动重启

    #!/bin/bash while : do neterror=$(/bin/netstat -a | grep -cw "CLOSE_WAIT") echo "get ...

  8. mysql数据库导入、导出、数据传输

    Navicat数据库之间导入导出1.双击要导出的数据库,右键选转储SQL文件...,选择要保存的文件夹. 2.点击开始后,开始导出. 数据库导入1.新建数据库,数据库的名字必须和导入的数据库文件一致. ...

  9. D3学习之地图

    D3学习之地图 (2017.03.09-03.11) 地图的意义 在可视化领域中,将数据点投影和关联到地理区域上,是一个非常关键的内容(体现了可视化中利用读者自身知识常识从而加速吸收信息的原则). G ...

  10. HP P420i Smart Array

    http://blog.mpecsinc.ca/2013/02/hp-p420i-smart-array-adding-4-new-disks.html https://techzone.ergon. ...