結果

問題 No.1002 Twotone
ユーザー _____TAB_____
提出日時 2020-02-28 22:28:29
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,200 bytes
コンパイル時間 1,520 ms
コンパイル使用メモリ 88,004 KB
最終ジャッジ日時 2025-01-09 02:50:16
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 13 WA * 20
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <map>
using namespace std;

long long ans = 0;

pair<long long,long long> dfs(const vector<vector<pair<int,int>>> &G, int v, int p, int c){
  map<int,int> C;
  vector<pair<long long,long long>> Q;
  long long s = 1, d = 0, f = 0;
  for(auto e : G[v]){
    if(e.first == p){
      Q.emplace_back(-10,-10);
      continue;
    }
    auto q = dfs(G,e.first,v,e.second);
    Q.push_back(q);
    C[e.second] += q.first;
    f += q.first;
    if(e.second == c) s += q.first, d += q.second;
    else d += q.first;
    ans += q.second;
    // diff += q.second;
  }
  long long diff = 0;
  for(size_t i = 0; i < G[v].size(); ++i){
    if(G[v][i].first == p) continue;
    // ans += Q[i].first*(f-C[G[v][i].second]);
    diff += Q[i].first*(f-C[G[v][i].second]);
  }
  ans += diff/2;
  // cerr << v << " {" << s << ", " << d << "}\n";
  // cerr << v << " " << diff << endl;
  return {s,d};
}

int main(){
  int N, K;
  cin >> N >> K;
  vector<vector<pair<int,int>>> G(N);
  for(int i = 1; i < N; ++i){
    int u, v, c;
    cin >> u >> v >> c;
    --u,--v,--c;
    G[u].emplace_back(v,c);
    G[v].emplace_back(u,c);
  }
  dfs(G,0,-1,-1);
  cout << ans << endl;
}
0