poj3683 2 -sat输出路径
tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =)
主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了
- #include<map>
- #include<set>
- #include<cmath>
- #include<queue>
- #include<stack>
- #include<vector>
- #include<cstdio>
- #include<cassert>
- #include<iomanip>
- #include<cstdlib>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define C 0.5772156649
- #define pi acos(-1.0)
- #define ll long long
- #define mod 1000000007
- #define ls l,m,rt<<1
- #define rs m+1,r,rt<<1|1
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- using namespace std;
- const double g=10.0,eps=1e-;
- const int N=+,maxn=+,inf=0x3f3f3f;
- stack<int>s;
- int ss[N],tt[N],d[N];
- int ins[N],inans[N];
- int dfn[N],low[N];
- int num,index;
- vector<int>v[N];
- int tarjan(int u)
- {
- ins[u]=;
- dfn[u]=low[u]=++index;
- s.push(u);
- for(int i=;i<v[u].size();i++)
- {
- int x=v[u][i];
- if(!dfn[x])
- {
- tarjan(x);
- low[u]=min(low[u],low[x]);
- }
- else if(ins[x]==)low[u]=min(low[u],dfn[x]);
- }
- if(dfn[u]==low[u])
- {
- ++num;
- while(!s.empty()){
- int k=s.top();
- s.pop();
- ins[k]=;
- inans[k]=num;
- if(k==u)break;
- }
- }
- }
- int main()
- {
- /* ios::sync_with_stdio(false);
- cin.tie(0);*/
- int n;
- scanf("%d",&n);
- memset(ins,,sizeof ins);
- memset(inans,,sizeof inans);
- memset(dfn,,sizeof dfn);
- memset(low,,sizeof low);
- while(!s.empty())s.pop();
- for(int i=;i<=*n;i++)v[i].clear();
- num=index=;
- for(int i=;i<=n;i++)
- {
- char S[],T[];
- scanf("%s%s%d",&S,&T,&d[i]);
- ss[i]=((int)(S[]-'')*+(int)(S[]-''))*+(int)(S[]-'')*+(int)(S[]-'');
- tt[i]=((int)(T[]-'')*+(int)(T[]-''))*+(int)(T[]-'')*+(int)(T[]-'');
- }
- for(int i=;i<=n;i++)
- {
- for(int j=i+;j<=n;j++)
- {
- if(min(ss[i]+d[i],ss[j]+d[j])>max(ss[i],ss[j]))
- {
- v[i].push_back(j+n);
- v[j].push_back(i+n);
- }
- if(min(ss[i]+d[i],tt[j])>max(ss[i],tt[j]-d[j]))
- {
- v[i].push_back(j);
- v[j+n].push_back(i+n);
- }
- if(min(tt[i],ss[j]+d[j])>max(tt[i]-d[i],ss[j]))
- {
- v[i+n].push_back(j+n);
- v[j].push_back(i);
- }
- if(min(tt[i],tt[j])>max(tt[i]-d[i],tt[j]-d[j]))
- {
- v[i+n].push_back(j);
- v[j+n].push_back(i);
- }
- }
- }
- for(int i=;i<=*n;i++)
- if(!dfn[i])
- tarjan(i);
- bool f=;
- for(int i=;i<=n;i++)
- if(inans[i]==inans[i+n])
- {
- f=;
- break;
- }
- if(f)puts("NO");
- else
- {
- puts("YES");
- for(int i=;i<=n;i++)
- {
- if(inans[i]<inans[i+n])printf("%02d:%02d %02d:%02d\n",ss[i]/,ss[i]%,(ss[i]+d[i])/,(ss[i]+d[i])%);
- else printf("%02d:%02d %02d:%02d\n",(tt[i]-d[i])/,(tt[i]-d[i])%,tt[i]/,tt[i]%);
- }
- }
- return ;
- }
- /********************
- ********************/
poj3683 2 -sat输出路径的更多相关文章
- VS 工程的 输出路径和工作路径的区别
输出路径,是vs编译项目生成可执行文件的路径:工作路径是环境变量,比如我们在程序中写相对路径,就是以这个路径为基础的.在默认情况下,输出路径和工作路径都不写的话,默认是程序的bin下面的debug或者 ...
- HD1385Minimum Transport Cost(Floyd + 输出路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- C++builder XE 安装控件 及输出路径
C++builder XE 安装控件 与cb6不一样了,和delphi可以共用一个包. 启动RAD Studio.打开包文件. Project>Options>Delphi Compile ...
- HDU 1385 Minimum Transport Cost (最短路,并输出路径)
题意:给你n个城市,一些城市之间会有一些道路,有边权.并且每个城市都会有一些费用. 然后你一些起点和终点,问你从起点到终点最少需要多少路途. 除了起点和终点,最短路的图中的每个城市的费用都要加上. 思 ...
- web项目Log4j日志输出路径配置问题
问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...
- VJP1071新年趣事之打牌(背包+输出路径)
简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下 #include <iostream> #include<cstdio> #include<cs ...
- (poj)3414 Pots (输出路径的广搜)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- Cmake 脚本对项目输出路径和输出头文件的路径定义
对Lib项目的统一输出路径以下时解决方案: set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_O ...
- Part Acquisition(spfa输出路径)
Part Acquisition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4080 Accepted: 1742 ...
随机推荐
- springmvc控制器controller单例问题
springmvc controller默认的是单例singleton的,具体可以查看注解scope可以一目了然. 单例的原因有二: 1.为了性能. 2.不需要多例. 1.这个不用废话了,单例不用每次 ...
- 原!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 ...
- python创建一个线程和一个线程池
创建一个线程 1.示例代码 import time import threading def task(arg): time.sleep(2) while True: num = input('> ...
- c++ 11nullptr
1. 引入nullptr的原因 引入nullptr的原因,这个要从NULL说起.对于C和C++程序员来说,一定不会对NULL感到陌生.但是C和C++中的NULL却不等价.NULL表示指针不指向任何对象 ...
- java反射基础知识(三)
原文地址:http://tutorials.jenkov.com/java-reflection/index.html http://www.cnblogs.com/penghongwei/p/329 ...
- java调用操作系统命令
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...
- shell检查网络出现异常、僵尸进程、内存过低后,自动重启
#!/bin/bash while : do neterror=$(/bin/netstat -a | grep -cw "CLOSE_WAIT") echo "get ...
- mysql数据库导入、导出、数据传输
Navicat数据库之间导入导出1.双击要导出的数据库,右键选转储SQL文件...,选择要保存的文件夹. 2.点击开始后,开始导出. 数据库导入1.新建数据库,数据库的名字必须和导入的数据库文件一致. ...
- D3学习之地图
D3学习之地图 (2017.03.09-03.11) 地图的意义 在可视化领域中,将数据点投影和关联到地理区域上,是一个非常关键的内容(体现了可视化中利用读者自身知识常识从而加速吸收信息的原则). G ...
- HP P420i Smart Array
http://blog.mpecsinc.ca/2013/02/hp-p420i-smart-array-adding-4-new-disks.html https://techzone.ergon. ...