Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define mp make_pair
- #define f first
- #define s second
- using namespace std;
- int n, d[1001], c = 0;
- bool g[1001][1001], used[1001], disabled[1001];
- pair <string, int> l[1001], ans[1001];
- queue <int> q;
- void bfs(int v) {
- used[v] = true;
- d[v] = 0;
- q.push(v);
- while (!q.empty()) {
- int x = q.front();
- q.pop();
- for (int i = 1; i <= n; i++) {
- if (g[x][i] == true && !used[i] && !disabled[i]) {
- used[i] = true;
- d[i] = d[x] + 1;
- q.push(i);
- }
- }
- }
- }
- int main() {
- cin>>n;
- for (int i = 1; i <= n; i++) {
- string name;
- int v, u;
- cin>>name>>v>>u;
- l[i] = mp(name, v);
- for (int j = 1; j <= u; j++) {
- string uname;
- int uv;
- cin>>uname>>uv;
- g[i][j] = true;
- }
- }
- bfs(1);
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= n && j != i; j++) {
- if (l[i].f == l[j].f && used[i] && used[j]) {
- if (d[i] > d[j])
- disabled[i] = true;
- else if (d[j] > d[i])
- disabled[j] = true;
- else {
- if (l[i].s > l[j].s)
- disabled[j] = true;
- else if (l[i].s < l[j].s)
- disabled[i] = true;
- }
- }
- }
- }
- int used[1001] = {};
- int d[1001] = {};
- bfs(1);
- for (int i = 1; i <= n; i++)
- if (used[i]) {
- c++;
- ans[i] = l[i].f;
- }
- sort(ans+1, ans+n);
- cout<<c<<endl;
- for (int i = 1; i <= n; i++)
- cout<<ans[i]<<l[i].s<<" "<<d[i]<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement