题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1080
题意描述:尝试用两种颜色给地图染色,若成功则输出01字符串,默认从0开始,若失败则输出-1;
思路大致是边BFS边判断,用字符串的位存储01信息,之后直接输出字符串;
AC代码:
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
#include <stack>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <map>
#include <iomanip>
using namespace std;
vector<vector<int> >v;
void bfs(){
string s(v.size(), '2');
s[1] = '0';
bool flag = false;
queue<int>q;
q.push(1);
while (!q.empty()){
int src = q.front(); q.pop();
for (int tar : v[src]){
if (s[tar] == '2'){
s[tar] = s[src] == '0' ? '1' : '0';
q.push(tar);
}
else if (s[tar] == s[src]){
flag = true;
break;
}
}
if (flag)break;
}
if (flag)cout << -1 << endl;
else cout << s.substr(1) << endl;
}
void func(){
int n, tar;
cin >> n;
v.resize(n + 1, vector<int>());
for (int i = 1; i <= n; i++){
while (cin >> tar&&tar){
v[i].push_back(tar);
v[tar].push_back(i);
}
}
bfs();
}
int main(){
//freopen("out.txt", "w", stdout);
//freopen("in.txt", "r", stdin);
func();
}