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 ...
随机推荐
- 阻塞IO、非阻塞IO、同步IO、异步IO等
https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...
- MyBatis 之动态SQL
1. 概述 动态 SQL 极大的简化了我们拼装SQL的操作; MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作: if choose(when,otherwise) trim(wher ...
- Qt 打印机支持模块
Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...
- reload函数
reload函数 python2中reload()是内置函数,可以直接调用: reload() python3中将reload()函数放到了imp包中,需要先引入imp包: from imp impo ...
- python可变参数*args, **kwargs
python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ', args print ' kwargs = ', k ...
- 谷歌公布全新设计语言:跟苹果Swift天差地别
今日凌晨.谷歌(微博)在I/O大会上公布了全新设计语言Material Design.在20多天前的WWDC上.苹果也公布了全新编程语言Swift.两家科技巨头公司,在一年一度的开发人员大会上,都公布 ...
- PAT 1047 Student List for Course[一般]
1047 Student List for Course (25 分) Zhejiang University has 40,000 students and provides 2,500 cours ...
- Ubuntu学习笔记2-网络部分
Ubuntu server配置IP地址 第一种方法:常规方法 1.登录Ubuntu Server,然后通过“sudo -s” 切换到root用户. 2.输入“cd /etc/network/”,回车 ...
- Rest_framework-3
目录: 返回值的封装 分页 视图 路由 渲染器 一 返回值的封装 a. API的基本框架 setting: 1 首先注册rest_framework 2 版本配置 REST_FRAMEWORK = { ...
- python2中range和xrange的区别
range和xrange用法相同,不同的是xrange不是生成一个序列,而是作为一个生成器,即生成一个取出一个 相对来说,xrange比range性能优化很多,因为不需要一下子开辟一块很大的内存,特别 ...