結果
| 問題 | No.439 チワワのなる木 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-30 14:31:13 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 42 ms / 5,000 ms |
| コード長 | 963 bytes |
| コンパイル時間 | 2,227 ms |
| コンパイル使用メモリ | 199,820 KB |
| 実行使用メモリ | 19,396 KB |
| 最終ジャッジ日時 | 2025-03-30 14:31:18 |
| 合計ジャッジ時間 | 4,481 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 28 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:49:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
49 | scanf("%s",s+1);
| ~~~~~^~~~~~~~~~
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch&15);
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
char s[100010];
vector<int>mp[200010];
int ans,f[100010][4];
inline void dfs(int pos,int fa)
{
bool fg=(s[pos]=='w');
f[pos][fg]=1;
for(auto to:mp[pos])
{
if(fa==to)continue;
dfs(to,pos);
for(int i=0;i<4;++i)ans+=f[pos][i]*f[to][3-i],f[pos][i]+=f[to][i];
if(fg)for(int i=0;i<2;++i)f[pos][i+2]+=f[to][i];
}
}
signed main()
{
int n=read();
scanf("%s",s+1);
for(int i=1;i<n;++i)
{
int u=read(),v=read();
mp[u].emplace_back(v);
mp[v].emplace_back(u);
}
dfs(1,0);
write(ans);
return 0;
}