[Lydsy1705月赛]挑战NP-Hard

挑战NP-Hard

题解

看到这道题的问法,感觉很奇怪,为什么要连续两个问呢?最后发现其实两个问是有关系的。

我们可以先暴力对所有的点进行染色,一个点的颜色即为所有相邻节点的mex,这样就可以O\left(n \right )染好色。

如果图上的颜色总数不超过k,那么第一问就有答案了。

否则我们就执行第二问,而图中由第k+1颜色的点到第1颜色的点的路径明显是一条目标路径,点互不相同。而对于颜色为i的点,它相邻点一定有一个颜色为i-1,否则它就是i-1颜色了,我们可以通过这种方式找出路径。

源码

挺好打的

 

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
#define MAXN 20005
typedef long long LL; 
int t,n,m,k; 
int head[MAXN],col[MAXN],tot;
int from[MAXN],to[MAXN],nxt[MAXN];
int vis[MAXN],pos;
#define g
posted @ 2020-01-21 19:24  StaroForgin  阅读(19)  评论(0)    收藏  举报  来源