#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <iomanip>
using namespace std;
struct TreeNode {
int val;
vector<TreeNode*> children;
TreeNode* parent;
};
struct ListNode {
int val;
ListNode* next;
ListNode(int x) :val(x), next(NULL) {}
};
unordered_map<string, string> father;
unordered_map<string, long long> dict1;
unordered_map<string, long long> dict2;
unordered_map<string, long long> result;
string find(string u) {
if (u == father[u]) return u;
else return find(father[u]);
}
void join(string u, string v) {
u = find(u);
v = find(v);
if (u == v) return;
father[v] = u;
}
int main() {
int M, N;
cin >> M;
cin >> N;
for (int i = 0; i < N; i++) {
string Ai;
string Bi;
long long hp;
long long ep;
cin >> Ai;
cin >> Bi;
cin >> hp;
cin >> ep;
father[Ai] = Ai;
/* if (Bi != "*") {
father[Bi] = Bi;
}*/
if (father.count(Ai)==0) {
father[Ai] = Ai;
}
if (father.count(Bi) == 0 && Bi != "*") {
father[Bi] = Bi;
}
if (Bi == "*") {
father[Ai] = Ai;
}
else {
join(Bi, Ai);
}
if (hp == 0) {
dict1[Ai] = ep;
}
if (hp == 1) {
dict2[Ai] = ep;
}
}
for (auto p : dict1) {
result[father[p.first]] += 5 * p.second;
}
for (auto p : dict2) {
result[father[p.first]] += 2 * p.second;
}
int add=0;
for (auto p : result) {
if (p.second > M) add++;
}
cout << add << endl;
return 0;
}
关于字符串的并查集
最新推荐文章于 2024-08-08 15:12:59 发布