题意:
输入一个n个节点m条边的连通图,n保证为奇数。设k为最小的奇数,使得每个点的度数不超过k,你的任务是把图中的结点涂上颜色1~k,使得相邻节点的颜色不同。多解任意输出,输入保证有解。
分析:
这题听莫名其妙的,问的k是度,但是度和着色是没有关系的(这里可以求指正,本人认为没关系),例如 可以从1放出4条线,这个时候按图中的意思就是k = 5了 可是只需要1是2 其余放出射线的终点均为1即可。
然后找一个起点,深搜到底,一直1,2,1,2,1,2,这样赋值下去,这样是最优赋值(感觉,没有证明,读者有兴趣可以证明)
原本以为和度有关系,但是其实是没有的,因此Degree里的id是没有用的。
代码:
#include<bits/stdc++.h>
#define LL long long
#define ms(s) memset(s, 0, sizeof(s))
using namespace std;
const int maxn = 1e4 + 10;
struct Degree {
int d;
int id;
friend bool operator < (const Degree& d1, const Degree& d2) {
return d1.d > d2.d;
}
}d[maxn];
int vis[maxn];
bool v[maxn];
int k;
unordered