0
点赞
收藏
分享

微信扫一扫

大型植被恢复(寒假每日一题 33)

长时间的干旱使得 Farmer John 的 大型植被恢复(寒假每日一题 33)_#include 块草地上牧草匮乏。

随着雨季即将到来,现在应当是重新种植的时候了。

在 Farmer John 的储物棚里有四个桶,每个桶里装着一种不同的草种。

他想要在每块草地上播种其中一种草。

作为一名奶农,Farmer John 想要确保他的每头奶牛都能得到丰富的食谱。

他的 大型植被恢复(寒假每日一题 33)_i++_02 头奶牛每一头都有两块喜爱的草地,他想要确保这两块草地种植不同种类的草,从而每头奶牛都可以选择两种草。

已知每块草地最多被 大型植被恢复(寒假每日一题 33)_图_03 头奶牛喜爱。

请帮助 Farmer John 选择每块草地所种的草的种类,使得所有奶牛的营养需求都得到满足。

输入格式
输入的第一行包含 大型植被恢复(寒假每日一题 33)_#include大型植被恢复(寒假每日一题 33)_i++_02

以下 大型植被恢复(寒假每日一题 33)_i++_02 行,每行包含两个范围为 大型植被恢复(寒假每日一题 33)_染色_07 的整数,为 Farmer John 的一头奶牛喜欢的两块草地。

输出格式
输出一个 大型植被恢复(寒假每日一题 33)_#include 位数,每一位均为 大型植被恢复(寒假每日一题 33)_染色_09 之一,表示每一块草地上所种的草的种类。

第一位对应草地 大型植被恢复(寒假每日一题 33)_图_10 的草的种类,第二位对应草地 大型植被恢复(寒假每日一题 33)_#include_11,以此类推。

如果有多种可行的解,只需输出所有解中最小的 大型植被恢复(寒假每日一题 33)_#include 位数。

数据范围
大型植被恢复(寒假每日一题 33)_i++_13

输入样例:

5 6
4 1
4 2
4 3
2 5
1 2
1 5

输出样例:

12133

可转换成染色问题

​解法一​

#include<iostream>
#include<cstring>
#include<unordered_set>

using namespace std;

const int N = 110, M = 160 << 1;

int n, m;
int color[N];
int h[N], e[M], ne[M], idx;

void add(int a, int b){
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void dfs(int u){

unordered_set<int> s;

for(int i = h[u]; ~i; i = ne[i]){
int j = e[i];
s.insert(color[j]);
}

for(int i = 1; ;i++){
if(!s.count(i)){
color[u] = i;
break;
}
}
}

int main(){

memset(h, -1, sizeof h);

scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++){
int a, b;
scanf("%d%d", &a, &b);
add(a, b), add(b, a);
}

for(int i = 1; i <= n; i++){
if(!color[i]) dfs(i);
printf("%d", color[i]);
}

return 0;
}

​解法二​

#include<iostream>
#include<cstring>

using namespace std;

const int N = 110, M = 160 << 1;

int n, m;
int color[N];
bool st[N][5];
int h[N], e[M], ne[M], idx;

void add(int a, int b){
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int main(){

memset(h, -1, sizeof h);

scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++){
int a, b;
scanf("%d%d", &a, &b);
add(a, b), add(b, a);
}

for(int i = 1; i <= n; i++){
for(int j = 1; j <= 4; j++){
if(!st[i][j]){

color[i] = j;
for(int k = h[i]; ~k; k = ne[k]){
st[e[k]][j] = true;
}
break;
}
}
}

for(int i = 1; i <= n; i++) printf("%d", color[i]);

return 0;
}


举报

相关推荐

0 条评论