设为首页 加入收藏

TOP

UVALive 3713 Astronauts
2015-07-20 17:47:55 来源: 作者: 【 】 浏览:2
Tags:UVALive 3713 Astronauts

题意:

有n个宇航员 他们需要完成A、B、C三种任务 年龄>=平均年龄的人可以做A和C 年龄<平均年龄的能做B和C 且宇航员之间有讨厌关系不能一起做任务 要求给出一种分配方案

思路:

一类人有2种选择而且必须选1个 因此想到2-sat 根据年龄和讨厌关系来建边 之后先做可行性判断 确定可以后 求出任意一组可行解 不需要字典序最小

代码:

#include
  
   
#include
   
     #include
    
      #include
     
       using namespace std; #define N 200010 struct edge { int u,v,next; }ed[N*4]; int n,m,tot,top,cnt,idx; int dfn[N],low[N],st[N],instack[N],belong[N],head[N],f[N],col[N],in[N],qu[N],opt[N]; void tarjan(int u) { int i,v; dfn[u]=low[u]=++idx; instack[u]=1; st[++top]=u; for(i=head[u];~i;i=ed[i].next) { v=ed[i].v; if(dfn[v]==-1) { tarjan(v); low[u]=min(low[u],low[v]); } else if(instack[v]&&dfn[v]
      
       >1); for(i=0;i
       
        tmp) f[i]=1; else f[i]=2; f[i+1]=3; } if(can()) { solve(); for(i=0;i
        
         

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA 10798 - Be wary of Roses(.. 下一篇HDU1575-Tr A(矩阵快速幂)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)