求助!最后两个WA了
  • 板块P2814 家谱
  • 楼主Alphaban
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/8/8 23:40
  • 上次更新2023/11/6 20:53:26
查看原帖
求助!最后两个WA了
112109
Alphaban楼主2020/8/8 23:40
#include<map>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
map<string, int> mp;
char c;string s;
int n, flag = 1, fa[50005];
string id[50005];
int find(int x) {
    if (x == fa[x])
        return x;
    else return fa[x] = find(fa[x]);    
}
int main() {
//   freopen("tx.in", "r", stdin);
  //  freopen("tx.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin >> c;
    for(int i = 1; i <= 50000; ++i)
        fa[i] = i;
    for(;;) {
        // c = getchar();
        if (c != '#')
            break;
        cin >> s;getchar();
     //   cout << s << endl;
        if (!mp[s]) {
            mp[s] = ++n;
            id[n] = s; 
        }   
       // mp[s] = 1;    
        int fas = mp[s];
      //  if (!fa[fas]) 
        //    fa[fas] = fas;    
        // }
       // cout << mp["Gareth"] << endl;;    
        for(;;) {
            // c = getchar();
            cin >> c;
            if (c ==  '?' || c == '$')
                flag = 0;
            if (c != '+')
                break;              
            cin >> s;getchar();
            if (!mp[s]) {
                mp[s] = ++n;
                id[n] = s;
            }    
            //cout << mp["Gareth"] << endl;;
           // id[n] = s;    
           // mp[s] = 1;       
            fa[mp[s]] = fas;    
        }
        if (!flag)
            break;
    }
 
    for(;;) {
        // cout << c << endl;
        if (c == '$')
            return 0;
        cin >> s;getchar();
        //c = getchar();
       // cout << 2 << endl;
        int x = find(mp[s]);
       // cout << mp[s] << endl;
       cout << s << " " << id[x] << endl;
        //cout << s << " " << id[x] << endl; 
        cin >> c;   
    }
    return 0;
}
2020/8/8 23:40
加载中...