3.21
题外话
今天挺有意思的,题意想明白了,然后代码写错了。。
题意
就是让你找出能𝑑𝑖𝑠(𝑖,𝑗) = 𝑑𝑖𝑠(𝑗,𝑘) = 𝑑𝑖𝑠(𝑖,𝑘) ,所有方案
思路
通过看样例, 发现符合条件的除了自己本身就是路径为偶数(注意两条奇数路经也是偶数,自己错在这),其他没啥说的,最后结果输出$ x^3$
代码
///*
//正在播放《フリージア》
//1:21 ━━━━━━●───── 5:35
// ? ? ?? ? ?
//```````'`...```````''`````````````'````````````````'`.`''
//```````''..`';;'```''```'''''''''''''`````````````````'':
//.````''''':;;!!:````'````'''''''''''``````````````````'':
//``''''''':;;;;;'```'``````''```````````____________```'':
//`````````:;;!;'```````````'```````'```| 所以说 |'``'':
//```````'|$&$%:````````````'```````````|不要停下来啊|''''':
//````'''!$&&&|'```````````'''::''::''''/ (指AC) |':'':::
//````'':|&&&$!'`````'''''''::.....`;!;'/_________|''``'::
// ....'|&&@$!'........```:!;'....`:;:```````````````````'
//..````;$&&&$!:''``````'':|%%!::;|%$$!::::::::''::::::::::
//``````!&&@&&|:'````````':|$$$$$$$$$|:':::::::::::::::::::
//`````:%&@@@@@@@@&&&@@@@&&&&@@@@@@@&&&|::::::::':::::::::;
//`````.```':|$@@@@@@@@@@@@@@@@@@@@@@@@###@@&&$|;:::'::::::
//````````````';|$&@@@@@@@@@###@@@@@@########@@@@$!''''::::
//`````````..````:|%$@@@@@#########@#########@@@@&!''''::::
//`````````````````:|&########################@@@$;::::::::
//``````````````````:!$@########################@%;:::'::::
//``````````..``````':|&#######################@@&!''''''::
//''''::'''`.`''''''':|@#######################@@&|:'`.`';!
//:::::::::``'''''';%@######################@@##@@&!::'';;;
//::;::::::`.''''';%@@@@####################$%@##@@%;:'':;!
//:;;;;::::``':;%@@@#########################&%&##@@|:'';;!
//;;!;;;;;;'`::;%@#############################@@##@$!'';!!
//;;;;;;;;:``':::::;|$@############################@$!'`;!!
//::;;;;;;:'`'::::::;!$@#######################&&@$$$;``:;;
//`````````..````````'|@#####################$;!$$$&@@|''':
//'''''''''''''':'''''|@#########@&@##########@@####@@&%|!!
//''''''''':'''::'':''!&########&!|&@##########&&####&%|!||
//:::::'''::::::::::::!&########|:;|$@#########@&###&%||||!
//:::::::'''''':::::::!&#######@!:;!!$@########@$&##@%||||!
//
// だからよ...止まるじゃねえぞ
// */
#include <vector>
#include <algorithm>
#include <string>
#include<cstring>
#include <iostream>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <cassert>
#include <chrono>
#include <random>
#include <iomanip>
#include <unordered_set>
#include <ctime>
#include <chrono>
using namespace std;
// #define ll long long
const int N =1e6+10;
#define PII pair<int , int >
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define pb push_back
#define sz(x) (int)(x).size()
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int n , m ,t ;
#define __i __int128
//ll mod = 1e9+7;
vector< pair<ll , ll > > s[11000];
ll cnt1 =0 , cnt2=0 ;
//string manacher(string s){
// if(s.size()<2)return s;
// string t ;t+='$';
// for(int i=0;i<s.size();i++)
// t +='#'+s[i];
// t+='@';
// int num = t.size();
// int p[num];
// int id =0 , mx= 0;
// int maxl = -1;
// int index =0;
// for(int j=1 ;j<num-1;j++){
// p[j] = mx>j?min(p[2*id-j],mx - j):1;
// while(t[j+p[j]]==t[j-p[j]])p[j]++;
// if(mx<p[j]+j){
// mx = p[j]+j;
// id = j;
// }
// if(maxl < p[j]+ 1){
// maxl = p[j]-1 ;
// index = j;
// }
// }
// int start = (index - maxl)/2;
// //cout <<start<<endl;
// return s.substr(start ,start+maxl);
//
//}
void dfs(ll x, ll fa, ll num) {
if(num%2)cnt1++;
else cnt2++;
for(int i=0 ;i<sz(s[x]);i++){
if(s[x][i].first == fa)continue ;
dfs(s[x][i].first, x, (num + s[x][i].second)%2 );
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >>n;
for(int i=0;i<n-1;i++){
ll a,b,c;cin>>a>>b>>c;
s[a].push_back({b,c});
s[b].push_back({a,c});
}
dfs(1,0,0);
cout<<cnt1*cnt1*cnt1+ cnt2*cnt2*cnt2<<endl;
// cout<<se.size()<<endl;
// cout<<n-s.size()+(s.size())*(s.size())*(s.size())<<endl;
return 0;
}