竞赛讨论区 > F题是不是有问题
头像
AKStream
编辑于 03-19 03:45 美国
+ 关注

F题是不是有问题

我模拟了这个样例

5 2

2 1

2 3

3 4

3 5

1 2 0 2 0

过掉的代码输出的结果为

// 0 0 0

// 2 1 1

// 1 0 1

// 0 0 0

// 0 0 0

可是这个样例的图是这样的

2 (1)

/ \

(2) 1 3 (0)

/ \

(2) 4 5 (0)

我的代码是这样输出

// 0 0 0

// 2 0 2

// 1 0 1

// 0 0 0

// 0 0 0

我不能确定是我理解错题意了还是题目本身有问题

附上我错误的代码

#include <bits/stdc++.h>

using namespace std;

#define all(c) (c).begin(), (c).end()

#define rall(x) (x).rbegin(), (x).rend()

#define sz(x) (int)(x).size()

#define Sum(a) accumulate((a).begin(), (a).end() , 0ll)

#define Min(a) *std::min_element((a).begin(), (a).end())

#define Max(a) *std::max_element((a).begin(), (a).end())

#define rev(a) reverse((a).begin(), (a).end())

#define each(x, a) for(auto& x : a)

#define mst(a, x) memset(a, x, sizeof(a))

#define LL long long

#define rep(i, from, to) for(ll i = from;i<to;i++)

#define rrep(i, from, to) for(ll i = from;i>to;i--)

#define to_uni(a) a.erase(unique(begin(a), end(a)), end(a))

#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define pp pop_back

#define endl "\n"

typedef pair<int, int> PII;

typedef pair<LL, LL> PLL;

const int mod = 1e9 + 7;

const int P = 998244353;

const int INF = 0x3f3f3f3f;

const int dx[4]={1, 0, -1, 0}, dy[4]={0, 1, 0, -1};

const int fx[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, fy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

const int N = 2e6 + 10;

int n,root;

int e[N],h[N],ne[N],idx,w[N];

int cnt[N][3];

std::vector<int> v;

void add(int a ,int b)

{

e[idx] = b,ne[idx] = h[a] , h[a] = idx ++ ;

}

void dfs(int u,int dad)

{

for(int i = h[u]; ~i ; i = ne[i])

{

int j = e[i];

if(j == dad) continue;

dfs(j,u);

for(int k = 0 ; k < 3 ; k ++)

cnt[u][k] += cnt[j][k];

}

cnt[u][w[u]]++;

}

void solve() {

memset(h, -1, sizeof h);

cin >> n >> root;

v.pb(root);

for(int i = 0 ; i < n - 1 ; i ++) {

int x,y;

cin >> x >> y;

add(x, y);

add(y, x);

v.pb(y);

}

// for(int i = 1 ; i <= n ; i ++)

// {

// int x;

// cin >> x;

// w[i] = x;

// }这个是对的;或者把w设置为unorderedmap

for(int i = 0 ; i < n ; i ++) {

int x;

cin >> x;

// 将节点值作为下标储存颜色

w[v[i]] = x;

}

dfs(root, 0);

for(int i = 1 ; i <= n ; i ++)

{

cout << cnt[i][0] - (w[i] == 0)<< ' ' << cnt[i][1] - (w[i] == 1) << " " <<cnt[i][2] - (w[i] == 2) << endl;

// cout << cnt[i][0] - (w[i] == 0)<< ' ' << cnt[i][1] - (w[i] == 1) << " " <<cnt[i][2] - (w[i] == 2) << endl;

}

}

int main()

{

ios::sync_with_stdio(false);

cin.tie(nullptr);

int t = 1;

//cin >> t;

while(t--)

solve();

return 0;

}

可能题目所描述中的

接下来一行共 n 个正整数,只含有0,1,2,表示第i个节点的颜色。应该改为是节点i的颜色是0,1,2吧。

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐