题目大意:

给定一张无向图,判断是不是弦图.

题解:

今天刚学了《弦图与区间图》

本来写了一个60行+的学习笔记

结果因为忘了保存重启电脑后被还原了...

那就算了吧.

MCS最大势算法,写起来挺愉悦的.

不过觉得除了做裸题就只能做裸题了..

直接贴板子

#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;static char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
#define rg register int
#define rep(i,a,b) for(rg i=(a);i<=(b);++i)
#define per(i,a,b) for(rg i=(a);i>=(b);--i)
const int maxn = 1024;
const int maxm = maxn*maxn;
struct Edge{
int next,to;
}G[maxm];
int head[maxn],cnt;
void add(int u,int v){
G[++cnt].to = v;
G[cnt].next = head[u];
head[u] = cnt;
}
vector<int>ws[maxn];
int seq[maxn],lab[maxn],pos[maxn];
bool map[maxn][maxn];
int main(){
int n,m;read(n);read(m);
int u,v;
rep(i,1,m){
read(u);read(v);
map[u][v] = map[v][u] = true;
add(u,v);add(v,u);
}
rep(i,1,n) ws[0].push_back(i);
int nw = 0;
per(i,n,1){
while(1){
u = ws[nw].back();
if(pos[u]) ws[nw].pop_back();
else break;
while(ws[nw].empty()) -- nw;
}
pos[u] = i;seq[i] = u;
for(int p = head[u];p;p=G[p].next){
++ lab[G[p].to];
nw = max(nw,lab[G[p].to]);
ws[lab[G[p].to]].push_back(G[p].to);
}
}
bool flag = false;
per(i,n,1){
u = seq[i];
v = -1;
for(int i = head[u];i;i=G[i].next){
if(pos[G[i].to] < pos[u]) continue;
if(v == -1 || (pos[v] > pos[G[i].to])) v = G[i].to;
}
for(int i = head[u];i;i=G[i].next){
if(pos[G[i].to] < pos[u]) continue;
if(v != G[i].to && !map[v][G[i].to]){
flag = true;
break;
}
}
if(flag) break;
}
puts(flag ? "Imperfect" : "Perfect");
return 0;
}


最新文章

  1. Palindrome Number
  2. iOS自动化编译方案
  3. 涵涵和爸爸习惯养成进度表(一)(May 5 - May 25)
  4. Codeforce#331 (Div. 2) A. Wilbur and Swimming Pool(谨以此题来纪念我的愚蠢)
  5. qbxt十一系列一
  6. Android Menu菜单使用
  7. java课堂练习之可变參数与卫条件
  8. iOS 日历控件
  9. 《JavaScript高级程序设计》读书笔记 ---小结
  10. ORACLE ORA-01653: unable to extend table 的错误
  11. oracle数据库完全卸载步骤
  12. 菜鸟系列docker——docker基本概念(1)
  13. [ipsec][crypto] 在IPSec ESP使用AES-GCM加密时的IV
  14. 解决pre-commit hook failed (add --no-verify to bypass)的问题
  15. 封装fetch的使用(包含超时处理)
  16. 添加mysqld、apache服务到windows服务
  17. 《大话设计模式》C#/C++版pdf/源码下载
  18. linux下保护视力、定时强制锁定软件: Workrave
  19. selenium.common.exceptions.WebDriverException: Message: &quot;Can&#39;t load the profile.
  20. axis2的WebService无法注入Service层类

热门文章

  1. Mark指针的指针(**)和链表使用(*&amp;)
  2. JS 创建对象(常见的几种方法)
  3. [原创]webpack动态设置css路径
  4. 新升级!EasyNVR3.0功能概述--直播与录像
  5. 启动/关闭Spring boot服务脚本
  6. 【python】-- MySQL简介、安装、操作
  7. can not find java.util.map java.lang.Double问题
  8. 微信小程序高度设置为100%
  9. 3.25课&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;&#183;JavaScript的DOM操作
  10. 每天一个Linux命令(8)cat命令