替换函数
#pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream> #include<map> #include<queue> #include<stack> #include<string> #include<functional> #include<math.h> //#include<bits/stdc++.h> using namespace std; typedef long long lint; typedef vector<int> VI; typedef pair<int, int> PII; typedef queue<int> QI; void makedata() { freopen("input.txt", "w", stdout); fclose(stdout); } string s, d; char f[256]; int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif //makedata(); std::ios::sync_with_stdio(0), cin.tie(0); int t; cin >> t; while (t--) { cin >> s >> d; int n = s.length(); memset(f, 0, sizeof(f)); bool ok = true; for (int i = 0; i < n; i++) { if (f[s[i]] == 0) f[s[i]] = d[i]; else if (f[s[i]] != d[i]) ok = false; } if (ok) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
替换函数2
树的权重
#pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> #include<algorithm> #include<iostream> #include<map> #include<queue> #include<stack> #include<string> #include<functional> #include<math.h> //#include<bits/stdc++.h> using namespace std; typedef long long lint; typedef vector<int> VI; typedef pair<int, int> PII; typedef queue<int> QI; void makedata() { freopen("input.txt", "w", stdout); fclose(stdout); } VI G[110000]; lint sum[110000], sz[110000], ans[110000], n; void dfs(int u, int fa) { sz[u] = 1; sum[u] = 0; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if (v == fa) continue; dfs(v, u); sz[u] += sz[v]; sum[u] += (sum[v] + sz[v]); } } void solve(int u, int fa) { ans[u] = ans[fa] + n - 2 * sz[u]; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if (v == fa) continue; solve(v, u); } } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif //makedata(); std::ios::sync_with_stdio(0), cin.tie(0); int u, v; cin >> n; for (int i = 1; i < n; i++) { cin >> u >> v; G[u].push_back(v); G[v].push_back(u); } dfs(1, -1); ans[1] = sum[1]; for (int i = 0; i < G[1].size(); i++) { int v = G[1][i]; solve(v, 1); } for (int i = 1; i <= n; i++) cout << ans[i] << endl; return 0; }
K偏差排列