8.15

发布时间 2023-08-15 19:20:52作者: 徐星凯
#include<iostream>
#include<vector>
#include<set>
using namespace std;
int maxlevel = 1;
vector<vector<int>> v;
set<int> s;
void dfs(int node,int level){
    if(level>maxlevel){
        maxlevel = level;
        s.clear();
        s.insert(node);
    }else if(level == maxlevel){
    s.insert(node);
    }
    for(int i=0;i<v[node].size();i++){
        dfs(v[node][i],level+1);
    }
}
int main()
{
    int n,num,root = 0;
    scanf("%d",&n);
    v.resize(n+1);
    for(int i=1;i<=n;i++){
        scanf("%d",&num);
        if(num==-1){
            root = i;
            continue;
        }
        v[num].push_back(i);
    }
    dfs(root,1);
    printf("%d\n",maxlevel);
    for(set<int>::iterator it = s.begin();it!=s.end();it++){
        if(it!=s.begin()){
            printf(" ");
        }
        printf("%d",*it);
    }
    return 0;
}
#include<iostream>
#include<map>
#include<vector>
#include<bits/stdc++.h>
using namespace std;

map<string,int> Gp;//在线编程成绩
map<string,int> Gm;//期中考试成绩
map<string,int> Gf;//期末考试成绩
map<string,double> G;//总评
map<string,int>::iterator it;
vector< pair<string,int> > vec;
bool cmp(pair<string,int> a,pair<string,int>b){
    if(a.second!=b.second)
        return a.second>b.second;
    return a.first<b.first;
}


int main()
{
    int p,m,n;
    cin>>p>>m>>n;
    
    for(int i=1;i<=p;i++)
    {
        string s;
        int score;
        cin>>s>>score;
        Gp[s]=score;
    }
    for(int i=1;i<=m;i++)
    {
        string s;
        int score;
        cin>>s>>score;
        Gm[s]=score;
    }
    for(int i=1;i<=n;i++)
    {
        string s;
        int score;
        cin>>s>>score;
        Gf[s]=score;
    }

    
    it=Gp.begin();
    while(it!=Gp.end())
    {
        string s;
        s=it->first;
        if(Gm.count(s)>0)
        {
            if(Gm[s]>Gf[s]) 
            {
                G[s]=0.4*Gm[s]+0.6*Gf[s];
                G[s]=round(G[s]);
            }
            else G[s]=Gf[s];
        }
        else
        {
            Gm[s]=-1;
            G[s]=Gf[s];
        }
        //cout<<s<<" "<<Gp[s]<<" "<<Gm[s]<<" "<<" "<<Gf[s]<<" "<<G[s]<<endl;
        it++;
    }
    
    
    for(map<string,double>::iterator it = G.begin();it!=G.end();it++)
    {
        vec.push_back( pair<string,int>(it->first,it->second));
    }
    
    sort(vec.begin(),vec.end(),cmp);
    
    
    
    for(vector< pair<string,int> >::iterator it=vec.begin();it!=vec.end();it++)
    {
        string s;
        s=it->first;
        if(Gp[s]>=200&&G[s]>=60)
        {
            cout<<s<<" "<<Gp[s]<<" "<<Gm[s]<<" "<<Gf[s]<<" "<<G[s]<<endl;
        }
    }
    

}