2011ACM成都赛区现场赛E题 (2-sat) (SPOJ9939)

本文深入探讨了一道看似简单的2-SAT问题,但因忽略了关键的矛盾条件而导致理解偏差,最终导致了比赛的失败。通过详细分析,揭示了在图论与算法结合应用中容易犯错的陷阱,并提供了有效的解决策略。

这是我最痛心的一道题,就是少了四句话,忘了加上矛盾而已,导致了我们队的滑铁卢。想想我还是算擅长图论的,这么典型的2-sat题还不过,真的很不应该,面壁……

#include <stdio.h>
#include <cstring>
using namespace std;
struct gtype {
       int y,next;
}g[1000100];
int first[20010],tt,n,m,tot,a[10010],x,y,k;
int low[20010],dfn[20010],stk[20010],cnt[20010],id,idx,end;
void add(int x,int y) {
    tot++;
    g[tot].y=y;
    g[tot].next=first[x];
    first[x]=tot;
}
void tarjan(int u) {
    low[u]=dfn[u]=++idx;
    stk[++end]=u;
    for(int x=first[u];x!=-1;x=g[x].next) {
        int v=g[x].y;
        if (!dfn[v]) {
            tarjan(v);
            if (low[u]>low[v]) low[u]=low[v];
        }
        else if (cnt[v]==0 && low[u]>dfn[v]) low[u]=dfn[v];
    }
    if(low[u]==dfn[u]) {
        ++id;
        do {
           cnt[stk[end]]=id;
        }while(u!=stk[end--]);
    }
}
void did(int x,int y,int k) {
     int a1=a[x],a2=(a[x]+1)%3;
     if (a2==0) a2=3;
     int b1=a[y],b2=(a[y]+1)%3;
     if (b2==0) b2=3;
     
     if (k==0) {
               if (a1==b1) add(x,y),add(y,x),add(x+n,y+n),add(y+n,x+n);
               else if (a2==b1) add(x+n,y),add(y,x+n),add(x,x+n),add(y+n,y);
               else add(x,y+n),add(y+n,x),add(x+n,x),add(y,y+n);
     }
     else {
               if (a1==b1) add(x,y+n),add(y+n,x),add(y,x+n),add(x+n,y);
               else if (a2==b1) add(y,x),add(x+n,y+n);
               else add(x,y),add(y+n,x+n);
     }
}
int main() {
    scanf("%d",&tt);
    for (int cas=1;cas<=tt;cas++) {
        scanf("%d%d",&n,&m);
        tot=0;
        memset(g,0,sizeof(g));
        memset(first,-1,sizeof(first));
        
        for (int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for (int i=1;i<=m;i++) {
                 scanf("%d%d%d",&x,&y,&k);
                 if (k==1) did(x,y,1);
                 else did(x,y,0);
        }
        
        memset(dfn,0,sizeof(dfn));
        memset(low,0,sizeof(low));
        memset(cnt,0,sizeof(cnt));       
        id=idx=end=0;
        for (int i=1;i<=2*n;i++)
            if (!dfn[i]) tarjan(i);
        bool yes=true;
        for (int i=1;i<=n;i++)
            if (cnt[i]==cnt[i+n]) {
               yes=false;
               break;
            }
        printf("Case #%d: ",cas);
        if (yes) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}    


下载代码方式:https://pan.quark.cn/s/604a73f2a5f9 流量分类机制(IEEE 802.1Qbv)将以太网数据传输划分为多个不同类别,每个类别均被分配特定时段以获取网络访问权,借此构建了类别专属的保护“路径”。依托IEEE 802.1Qcc的优化SRP与性能提升,用户网络接口(UNI)得到扩充,从而支持了远程集中化的网络设置。 ### IEEE 802.1Qbv TSN:流量调度技术详解 #### 一、IEEE 802.1Qbv TSN概述 在当前迅速演进的科技领域中,特别是工业自动化、汽车电子以及高性能计算等领域对实时通信的需求持续上升,时间敏感型网络(Time-Sensitive Networking, TSN)技术随之出现。其中,IEEE 802.1Qbv规范是TSN体系中的一个关键构成,主要聚焦于以太网中时间敏感数据流量的管理与调度。 #### 二、IEEE 802.1Qbv标准背景 IEEE 802.1Qbv由IEEE LAN/MAN标准委员会制定,作为IEEE 802.1Q-2014规范的一个延伸,目的是为支持定时传输的数据单元提供更高效、更精准的服务。该规范通过引入时间敏感的流量调度机制,使网络能更好地适应工业控制等环境下的实时性要求。 #### 三、核心概念阐释 **1. 流量调度(Scheduled Traffic)** - **定义**:IEEE 802.1Qbv的核心功能之一是流量调度,它允许依据预定的时间计划来传输不同类型的网络数据。 - **作用**:通过设定优先级和分配时间间隙,保障关键任务数据单元能在规定时限内完成传输,从而增强整个网络的可靠性与确定性。 **2. 类别特定的保护“路径”** - **...
打开链接下载源码: https://pan.quark.cn/s/3e18267cc8f4 ### 倍福PLC从入门到精通 #### 一、系统概述 倍福PLC(Programmable Logic Controller)是一种具有高性能的工业自动化控制设备,其采用了PC架构并融合了实时操作系统TwinCAT,非常适用于复杂多变的工业控制环境。本书着重阐述了倍福PLC的基础理论、安装设置流程以及具体的应用技巧。 **核心知识点:** 1. **原理说明**:倍福PLC基于PC的架构设计,意味着它能够借助PC的强大计算能力和丰富的接口资源来执行复杂的控制任务。同时,通过整合TwinCAT实时操作系统,能够实现高精度的时间同步和低延迟的数据处理性能。 2. **选型建议**:选择合适的倍福控制器至关重要,例如CX系列、CPxxxx系列或Cxxxx系列等,它们各自具有独特的优势,适用于不同的应用场景。选型时需要考虑的因素包括处理速度、I/O接口数量、内存容量等。 3. **安装设置**:详细说明了在Windows操作系统环境下如何安装和配置TwinCAT 2.0软件,涵盖了系统环境的准备、软件安装步骤以及必要的系统设定等。 4. **接线方法**:提供了清晰的接线图示和步骤说明,指导用户正确地将控制器与外部设备连接。 #### 二、编程入门 这一章节主要面向初次接触倍福PLC的用户,通过简单的实例程序来讲解编程的基本流程和技术要点。 **核心知识点:** 1. **编程环境熟悉**:了解TwinCAT 2.0的编程环境,包括开发工具的使用方法和程序结构等。 2. **基础编程技能**:学习如何编写控制逻辑,掌握基本的编程指令如条件语句、循环结构等。 3. **程序调试方法*...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值