2-ST是一种巧妙的建图模式。。。。其实,主要是将互相限制的条件转化为有向图。实现时,将每个点拆成两点,对应这个点的两种取值,然后求强连通分量。由于每个点只能有一种取值,所以若强连通分量中某一个点拆成的两个点在同一个强连通分量中则问题无解。那么,如果问题有解,怎么得到问题的解呢?首先是根据计算出的强连通分量重新构图,构图时逆向构图,然后在新图上拓扑排序就能得到一组解。。。

 struct node
 {
     int v,next;
 };

 //每个点u拆成2*u和2*u+1
 //若有解,一组解存在ans中[0,n-1]
 ;
 node edges[];
 int head[MAX],dfn[MAX],low[MAX],visit[MAX],color[MAX];
 int in[MAX],col[MAX],map[MAX][MAX],conflict[MAX];
 int n,m,e,index,cnt;
 stack<int> S;
 int ans[MAX];

 void Add(int u,int v)
 {
     edges[e].v=v;
     edges[e].next=head[u];
     head[u]=e++;
 }

 void Tarjan(int u)
 {
     int i,v;

     low[u]=dfn[u]=++index;S.push(u);visit[u]=;
     ;i=edges[i].next)
     {
         v=edges[i].v;
         if(!dfn[v])
         {
             Tarjan(v);
             low[u]=min(low[u],low[v]);
         }
         else if(visit[v]) low[u]=min(low[u],dfn[v]);
     }
     if(dfn[u]==low[u])
     {
         cnt++;
         do
         {
             v=S.top();
             S.pop();
             visit[v]=;
             color[v]=cnt;
         }while(u!=v);
     }
 }

 void Build()
 {
     int i,u,v;

     memset(map,,sizeof(map));
     memset(,sizeof(in));
     ;u<*n;u++) ;i=edges[i].next)
     {
         v=edges[i].v;

         //逆向拓扑
         ;
     }
     ;u<=cnt;u++) ;v<=cnt;v++) if(map[u][v])
         in[v]++;
 }

 void Topsort()
 {
     int i,u,v;

     memset(col,,sizeof(col));
     while(!S.empty()) S.pop();
     ;i<=cnt;i++) if(!in[i]) S.push(i);
     while(!S.empty())
     {
         u=S.top();
         S.pop();
         ,col[conflict[u]]=;
         ;v<=cnt;v++) )
             S.push(v);
     }
 }

 void Cal()
 {
     int i;
     ;i<*n;i+=)
     {
         ]]) ans[i/]=i;
         ]=i+;
     }
 }

 int TWO_ST()
 {
     int i;

     memset(dfn,,sizeof(dfn));
     memset(visit,,sizeof(visit));
     index=cnt=;
     while(!S.empty()) S.pop();
     ;i<*n;i++) if(!dfn[i]) Tarjan(i);

     ;i<n;i++)
     {
         *i]==color[*i+]) ;
         conflict[color[*i]]=color[*i+];
         conflict[color[*i+]]=color[*i];
     }

     Build();
     Topsort();
     Cal();
     ;
 }
   

2-st学习笔记的更多相关文章

  1. Android学习笔记(八)——四种基本布局

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...

  2. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  3. CUBRID学习笔记 45 REPLACE DELETE MERGE 教程

    c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 ------ 官方文档是英文的, ...

  4. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  5. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

  6. Android(java)学习笔记71:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...

  7. HMM的学习笔记1:前向算法

    HMM的学习笔记 HMM是关于时序的概率模型.描写叙述由一个隐藏的马尔科夫链随机生成不可观測的状态随机序列,再由各个状态生成不可观測的状态随机序列,再由各个状态生成一个观測而产生观測的随机过程. HM ...

  8. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  9. AU3学习笔记

    目录 1. AU3是什么?能做什么? 2. 乱学AU3中的命令(语言相关)? 3. 通过简单示例学习AU3? 4. 正则表达式的学习(对大小写敏感) 5.对于GUI的相关学习 1.        AU ...

  10. C++内存管理学习笔记(6)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

随机推荐

  1. Centos minimal安装

    Q:为什么要安装minimal版本?而不是完整版 A:因为它资源小啊 @ @ 怎么安装就不说了,网上资源大把,Centos7好像变化挺大,mysql都装不上,还是装6吧~ 1.安装完是不能联网的,解决 ...

  2. LINQ教程

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  3. log4net应用

    1,配置文件 如果放在Web.config文件中,要放在根节点<configuration>下. 但一般为了方便配置文件的修改,可以将配置文件独立于Web.config,而单独放在一个文本 ...

  4. Git 常见的一些小命令

        Git 常见的一些命令 关于一些参数比较多,比较复杂的都有单独进行介绍         1. git cherry-pick 挑拣命令,当我们不想合并分支,或者git pull 更新仓库,而是 ...

  5. PHP数组内容不重复组合排列算法

    最近在做ecshop的商品库存模块,分别给一款商品的多个属性组合设置库存,如下图: 一款手机有不同颜色,屏幕尺寸,系统和电量,都要设置不同的库存,如果都要手动选择属性组合,则会耗费很多不必要的时间.假 ...

  6. AFNETWorking 不支持中文URL请求

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px } p.p ...

  7. 系统无法开始服务器进程。请检查用户名和密码。 (Exception from HRESULT: 0x8000401A)

    开始-运行-cmd,输入aspnet_regiis.exe -i 重新注册iis 或者 出现以下错误:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-0000 ...

  8. (三) UART 串口通讯

    UART  : university asynchronous receiver and transmitter UART  // 通用异步接收器和发送器 为什么要有串口:因为许多嵌入式设备没有显示屏 ...

  9. JdbcUtils.java

    package com.jdbc.dbutils; import java.lang.reflect.Field; import java.sql.Connection; import java.sq ...

  10. YbSoftwareFactory 代码生成插件【二十二】:CMS基础功能的实现

    很多网友建议在YbRapidSolution for MVC框架的基础上实现CMS功能,以方便进行内容的管理,加快前端页面的开发速度.因此花了一段时间,实现了一套CMS内容发布系统并已集成至YbRap ...