首页 > 其他分享 >Ring Road 2

Ring Road 2

时间:2024-05-20 11:53:37浏览次数:21  
标签:cnt const int dfn low Ring Road define

Ring Road 2

题目链接

思路:先考虑什么情况下会相交,对于两条道路 \((x_1,y_1)\) 和 \((x_2,y_2)\) 。这里默认 \(x < y\) ,显然

当 $x2 < x1<y2 $ 并且 \(y1<x2\) || \(y1>y2\) 时(\(x1\) 和 \(y1\) 互换也可以,即一个点在范围内,一个点在范围外),

那么两条道路就会产生交点。

因此对于产生交点的两条道路,如果一条在环内,那么另外一条必须在环外。反之同理。那么直接 \(2-SAT\) 建边即可。

tips:以往的题目都是通过转化成或关系然后转蕴含关系再建边,此类题目可以根据选了谁必须选谁就可以更加方便的建边了。

注意不要少建了两条边即可。

代码

#include<bits/stdc++.h>

using namespace std;

#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;

typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 0;

vector<int> e[N];
stack<int> stk;
int dfn[N],low[N],tot;
int instk[N],scc[N],siz[N],cnt;
int n,m,st[N];

void tarjan(int u){
  dfn[u]=low[u]=++tot;
  stk.push(u);instk[u]=1;
  for(auto v:e[u]){
    if(!dfn[v]){
      tarjan(v);
      low[u]=min(low[u],low[v]);
    }else if(instk[v]) low[u]=min(low[u],dfn[v]);
  }
  if(dfn[u]==low[u]){
    int v;cnt++;
    do{
      v=stk.top();
      stk.pop();
      instk[v]=0;
      scc[v]=cnt;
      siz[cnt]++;
    }while(v!=u);
  }  
}

void Showball(){
  cin>>n>>m;
  vector<PII> a(m); 
  for(int i=0;i<m;i++){
    int u,v;
    cin>>u>>v;
    if(u>v) swap(u,v);
    a[i]={u,v};
  }
  
  auto check=[&](int x,int y,int st,int ed){
     return (st<x&&x<ed&&(y<st||y>ed))||(st<y&&y<ed&&(x<st||x>ed));
  };
  
  for(int i=0;i<m;i++){
    auto [st,ed]=a[i];
    for(int j=i+1;j<m;j++){
      auto [u,v]=a[j];
      if(check(u,v,st,ed)){
        e[i<<1].pb(j<<1|1);
        e[j<<1].pb(i<<1|1);
        e[i<<1|1].pb(j<<1);
        e[j<<1|1].pb(i<<1);
      }
    }
  }
  for(int i=0;i<2*m;i++){
    if(!dfn[i]) tarjan(i);
  }

  string ans="";
  for(int i=0;i<m;i++){
     if(scc[i<<1]==scc[i<<1|1]) return cout<<"Impossible\n",void();
     ans+=(scc[i<<1]<scc[i<<1|1]?"i":"o");   
  }
  cout<<ans<<endl;

}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T=1;
    if(cases) cin>>T;
    while(T--)
    Showball();
    return 0;
}

标签:cnt,const,int,dfn,low,Ring,Road,define
From: https://www.cnblogs.com/showball/p/18201558

相关文章

  • springBoot统一异常处理
    一、概述:  1.1.Spring在3.2版本增加了一个注解@ControllerAdvice,可以与@ExceptionHandler、@InitBinder、@ModelAttribute 等注解注解配套使用。简单的说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。借助该注解,我们可以实现:在独立的某个地方,比如单独一个类,定......
  • springboot配置热部署
    ​ springboot配置热部署在SpringBoot中配置热部署通常涉及到使用SpringBootDevTools依赖和配置应用服务器的热部署特性。以下是一个基本的配置步骤:一.pom.xml:在pom.xml中添加SpringBootDevTools依赖:<dependencies><!--其他依赖--><dependency>......
  • Invalid URI at UnityEngineInternal.WebRequestUtils.MakeInitialUrl (System.Stri
    问题背景:有一个项目用到3d模型,原来访问地址用的是域名,访问老是报跨域问题,于是换成了内网地址这么一换问题来了,控制台直接报错 FormatException:InvalidURIatUnityEngineInternal.WebRequestUtils.MakeInitialUrl(System.StringtargetUrl,System.StringlocalUrl)[0......
  • 46.Spring(AOP)学习整理
    SpringAOP面向切面编程它依旧是一种设计思想本质还是为了松散耦合先去分一个概念OOP面向对象编程实体及其属性行为AOP面向切面编程某个阶段或者步骤看下图解:代码业务的实现都是纵向而AOP切面实现为横向AOP的一些术语:连接点(Jointpoint):表示需要在程序中插入......
  • 基于 Spring Boot3、Vue3!这套小说系统开源了...
    大家好,我是Java陈序员。今天,给大家介绍一个基于SpringBoot3、Vue3前后端分离的小说项目,集成了主流的技术栈,可供学习使用!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍novel——一套基于SpringBoot3+Vue3开发......
  • Spring 对于事务上的应用的详细说明
    1.Spring对于事务上的应用的详细说明@目录1.Spring对于事务上的应用的详细说明每博一文案2.事务概述3.引入事务场景3.1第一步:准备数据库表3.2第二步:创建包结构3.3第三步:准备对应数据库映射的Bean类3.4第四步:编写持久层3.5第五步:编写业务层3.6第六步:编写Spring配置......
  • STL | string
    string介绍c++支持两种类型的字符串,一以NULL结尾的c风格字符串;二string类型的字符串头文件string是basic_string类模板使用char特化的类型#include<string>typedefbasic_string<char,char_traits<char>,allocator<char>>string;初始化//默认string对象,长度为0str......
  • Spring IoC注解式开发无敌详细(细节丰富)
    1.SpringIoC注解式开发无敌详细(细节丰富)@目录1.SpringIoC注解式开发无敌详细(细节丰富)每博一文案2.注解回顾3.Spring声明Bean的注解3.1Spring注解的使用3.1.1特别的:如果要扫描的是多个包3.1.2Spring选择性实例化Bean对象3.2通过注解实现“Spring的注入”3.2.1@Value......
  • net.sf.jsqlparser.schema.Column.withColumnName(Ljava/lang/String;)Lnet/sf/jsqlpar
    https://blog.csdn.net/yuanzhugen/article/details/133648431 SpringBoot整合mybatisplus报错:net.sf.jsqlparser.schema.Column,isavailablefromthefollowinglocationsAnattemptwasmadetocallthemethodnet.sf.jsqlparser.schema.Column.withColumnName(Ljava/l......
  • SpringCloud(3)-OpenFeign相关配置
    OpenFeign是个声明式WebService客户端,使用OpenFeign让编写WebService客户端更简单。SpringCloud对OpenFeign进行了封装使其支持了SpringMVC标准注解和HttpMessageConverters。OpenFeign可以与Eureka和Ribbon组合使用以支持负载均衡。1.配......