1 条题解
-
0
一轮循环标记他所能到达的位置,同时统计颜色为 的个数 , 二轮循环计算 即循环内所有数
/** * author: 小飞侠 * created: 2024.10.09 20:35:11 */ #include <iostream> #include <string> using namespace std; const int N = 200010; int cnt[N], p[N], st[N]; int t; int main() { cin >> t; while(t--) { int n; string s; cin >> n; for(int i = 1; i <= n; ++ i ) cin >> p[i]; cin >> s; for (int i = 1; i <= n; ++ i ) { if(st[i]) continue; int c = 0; while (!st[i]) { st[i] = 1; c += s[i - 1] == '0'; i = p[i]; } while(st[i] != 2) { st[i] = 2; cnt[i] = c; i = p[i]; } } for(int i = 1; i <= n; ++ i ) { cout << cnt[i] << ' '; } cout << endl; for(int i = 1; i <= n; ++ i ) {p[i] = 0; st[i] = 0; cnt[i] = 0;} } return 0; }
- 1
信息
- ID
- 5404
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 6
- 已通过
- 3
- 上传者