#include <iostream> #include <vector> #include <set> using namespace std; int main() { int n, t, x; cin >> n; set<int> monsters; vector<int> types(n); vector<int> nodes(n); for (int i = 0; i < n; ++i) { cin >> types[i] >> nodes[i]; nodes[i] -= 1; } int last = 0; // 1 说 2 是宝箱 2说3是宝箱, 3说1是宝箱怪,这样的矛盾判断1是宝箱怪 for (int i = 0; i < n; ++i) { int count = 0; int k = i; while (types[k] == 1) { k = nodes[k]; if (++count >= n) break; // 处理 环 } if (types[k] == 2 && nodes[k] == i) monsters.insert(i); } // 指向宝箱怪 是 宝箱的 都是 宝箱怪 while (last != monsters.size()) { last = monsters.size(); for (int i = 0; i < n; ++i) { if (types[i] == 1 && monsters.find(nodes[i]) != monsters.end()) { monsters.insert(i); } } } cout << 0 << " " << monsters.size() << endl; return 0; }
点赞 8

相关推荐

09-11 10:30
门头沟学院 C++
隔壁刷到的,请问几年前真的是这样吗
zmc曦:差不多,以运营商为例。三四年钱区县是二本去的,现在普通一本就只能往区县去。以前省公司招92本、硕,现在市公司就要了。
我的秋招日记
点赞 评论 收藏
分享
09-10 14:27
中南大学 营销
在提需求的安德鲁很无...:阿q,对面只会觉得好笑
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务