13 solutions

  • 5
    @ 2023-12-13 16:32:28
    #include <bits/stdc++.h>
    using namespace std;
    int rt,mx;vector<int> mxc;
    int a[105],t[105];	// a 存 ai 的父亲,t 存 ti 有几个儿子
    int main(int argc, char **argv){
    	int n,m;
    	cin >> n >> m;
    	for (int i = 1;i <= m;i++){	// 输入 ai(i 的父亲)
    		int x,y;
    		cin >> x >> y;
    		a[y] = x;
    	}
    	for (int i = 1;i <= n;i++){	// 找 root 和 并计算儿子
    		t[a[i]]++;
    		if (a[i] == 0){
    			rt = i;
    		}
    	}
    	for (int i = 1;i <= n;i++){	// 找 max
    		if (t[mx] < t[i]){
    			mx = i;
    		}
    	}
    	for (int i = 1;i <= n;i++){	// 找 max 的儿子
    		if (a[i] == mx){
    			mxc.push_back(i);
    		}
    	}
    	printf("%d\n%d\n",rt,mx);
    	for (int i = 0;i < mxc.size();i++){
    		printf("%d ",mxc[i]);
    	}
    	return 0;
    }
    
  • 4
    @ 2023-12-13 16:48:47

    短小、精悍!!!!!!

    #include<bits/stdc++.h>
    using namespace std;
    int hasp[210],arr[210][12],dad[210];
    int main(){
        int n,m,maxx=0,flag=0;
        cin>>n>>m;
        for(int i=0;i<m;i++){
            cin>>arr[i][0]>>arr[i][1];
            hasp[arr[i][0]]++;
            dad[arr[i][1]]++;
        }
        for(int mm=0;mm<m;mm++){
            int i=arr[mm][0];
            if(dad[i]==0 && flag==0){
                flag=1;
                cout<<i<<endl;
            }
            if(hasp[i]>hasp[maxx]) maxx=i;
        }
        cout<<maxx<<endl;
        for(int i=0;i<m;i++){
            if(arr[i][0]==maxx) cout<<arr[i][1]<<' ';
        }
        return 0;
    }
    
    • 3
      @ 2023-12-30 15:22:07
      #include<bits/stdc++.h>
      using namespace std;
      int n,m;
      int tree[1005],cnt[1005];//用两个数组分别存结点关系和结点的度 
      void set(){
      	for(int i=0;i<1005;i++){
      		tree[i]=-1;
      	}
      }//以防万一(不打也可以 
      int main(){
      	cin>>n>>m;
      	set(); 
      	while(m--){
      		int x,y;
      		cin>>x>>y;
      		tree[y]=x;//表示x是y的前趋 
      		if(tree[x]==-1) tree[x]=0;
      		cnt[x]++;//x的度++ 
      	}
      	for(int i=1;i<1005;i++){
      		if(tree[i]==0){//当i结点没有前趋时即i是根结点 
      			cout<<i<<endl;break;
      		}
      	}
      	int mx=-1;
      	for(int i=1;i<1005;i++){
      		mx=max(mx,cnt[i]);
      	}//找最大 
      	for(int i=1;i<1005;i++){
      		if(cnt[i]==mx){
      			cout<<i<<endl;
      			for(int j=1;j<1005;j++){
      				if(tree[j]==i) cout<<j<<' ';
      			}
      			break;//注意有坑 
      		}
      	}
      	return 0;
      }
      
      不用vector的做法
      
    • 2
      @ 2023-12-13 18:24:47
      操作有点像桶(反正也210个)
      
      存贮节点:
      p  (这个节点的ba ba)
      c[210]  (这个节点的儿子,有多个)
      lo  (这个节点的度,就有多少个儿子)
      us  (是否使用过)
      

      每泥的代码:

      #include<iostream>
      using namespace std;
      int n,m,x,y,ma=0,mi;
      //ma记录最大的度,mi记录最大的度的节点
      struct node//一个节点
      {
       int p=-1,lo=0;
       int c[110];
       bool us=false;
      }tree[210];//一个"树"
      int main()
      {
       cin>>n>>m;//输入
       for(int i=0;i<m;i++)
       {
        cin>>x>>y;//输入
        tree[x].c[tree[x].lo]=y;//设置儿子
        tree[x].lo++;//指向下一个儿子的位置
        tree[y].p=x;//设置ba ba
        tree[x].us=true;//标为已使用
        tree[y].us=true;//标为已使用
       }
       for(int i=0;i<210;i++)//寻找zu zong
       {
        if(tree[i].p==-1 &&  tree[i].us==true)//是不是zu zong
        {
         cout<<i<<endl;//输出zu zong
         break;
        }
       }
       for(int i=0;i<210;i++)//找最牛逼(多儿子)的ba ba(节点)
       {
        if(tree[i].lo>ma)//设置
        {
         ma=tree[i].lo;
         mi=i;
        }
       }
       cout<<mi<<endl;//输出
       for(int i=0;i<tree[mi].lo;i++)
       {
        cout<<tree[mi].c[i]<<" ";//输出
       }
       return 0;//完结散花
      }
      
      • @ 2023-12-16 14:18:35

        "不要用树做",树就是一个逻辑概念,不管你怎么存,它就是一棵树啊,image

      • @ 2023-12-30 11:09:55

        改了@

      • @ 2023-12-30 16:34:57

        @

    • 1
      @ 2025-2-21 19:44:44
      #include<iostream>
      #include<cstdio>
      using namespace std;
      int n,m,tr[1000]={0};
      int x,y,root,maxpt,sum,mx;
      int main(){
      	cin>>n>>m; //n为节点数,m为边数 
      	for(int i=1;i<=m;i++){//x--y,一条边 
      		cin>>x>>y;
      		tr[y]=x;//存父亲
      	} 
      	//根 
      	for(int i=1;i<=n;i++){
      		if(tr[i]==0){  //为啥不能-1,-1? 
      			root=i;
      			break;
      		}
      	}
      	//最多孩子的点 
      	for(int i=1;i<=n;i++){//i爹,j儿子 
      		sum=0;//儿子数清零 
      		for(int j=1;j<=n;j++){
      			if(tr[j]==i)sum++;
      			if(sum>mx){
      				mx=sum;
      				maxpt=i;
      			}
      		}
      	}
      	//
      	cout<<root<<endl<<maxpt<<endl;
      	for(int i=1;i<=n;i++){
      		if(tr[i]==maxpt)cout<<i<<" ";
      	}
      	return 0;
      }
      
      
    • 1
      @ 2025-2-21 18:56:28
      #include <bits/stdc++.h>
      using namespace std;
      int n, m;
      int root;
      // 存储每个节点的孩子节点 
      vector<int> c[105];
      // 标记每个节点是否有父节点 
      bool f[105];
      int main() 
      {
          cin >> n >> m;
          // 读取边的信息 
          for (int i = 0; i < m; i++) 
      	{
              int x, y;
              cin >> x >> y;
              c[x].push_back(y);
              f[y] = true;
          }
          // 找到根节点
          for (int i = 1; i <= n; ++i) 
      	{
              if (!f[i]) 
      		{
                  root = i;
                  break;
              }
          }
          // 找到孩子最多的节点 
          int max = 0;
          int maxs = 0;
          for (int i = 1; i <= n; ++i) 
      	{
              if (c[i].size() > max) 
      		{
                  max = c[i].size();
                  maxs = i;
              }
          }
      
          // 对孩子节点进行排序
          sort(c[maxs].begin(), c[maxs].end());
      
          // 输出结果
          cout << root << endl;
          cout << maxs << endl;
          for (int i = 0; i < c[maxs].size(); i++) 
      	{
              cout << c[maxs][i]<<" ";
          }
          return 0;
      }
      
      
      • 1
        @ 2025-1-18 13:54:05
        //freopen("xx.in","r",stdin);
        //freopen("xx.out","w",stdout);
        #include<bits/stdc++.h>
        #include<iostream> 
        #include<iomanip>
        #include<cmath>
        #include<algorithm> 
        #include<string> 
        #include<cstdio>
        #include<cstring> 
        //#include<vector>
        //#include<map>
        //#include<stack>  
        //#include<queue> 
        //#include<set>
        using namespace std; 
        
        vector<int> g[100010];
        int yt[100010];
        int dfs(int u){
        	if(yt[u]==0)return u;
        	else dfs(yt[u]);
        }
        int main(){
        	int n,m;
        	cin>>n>>m;
        	for(int i=1;i<=m;i++){
        		int u,v;
        		cin>>u>>v;
        		g[u].push_back(v);
        		yt[v]=u;
        	}
        	int maxs=0,li;
        	for(int i=1;i<=n;i++){
        		int we=g[i].size();
        		if(we>maxs){
        			maxs=max(maxs,we);
        			li=i;
        		}
        		//cout<<we<<" ";
        	}
        	cout<<dfs(1)<<'\n';
        	cout<<li<<'\n';
        	for(int i=0;i<g[li].size();i++){
        		cout<<g[li][i]<<" ";
        	}
        	return 0;
        	
        }
        
        • 1
          @ 2023-12-15 19:56:20
          #include<iostream> 
          #include<vector>
          using namespace std;
          const int d=10;
          struct node{
          	int parent;
          	vector<int> cs;
          };
          node* tree[101];
          int a;
          int main(){
          	int n,m,x,y;
          	cin>>n>>m;
          	for(int i=1;i<=m;i++){
          		cin>>x>>y;
          		if(tree[x]==nullptr){
          			tree[x]=new node;
          			tree[x]->parent=0;
          			tree[x]->cs=vector<int>();
          			tree[x]->cs.push_back(y);
          		}else{
          			tree[x]->cs.push_back(y);
          		}
          		if(tree[y]==nullptr){
          			tree[y]=new node;
          			tree[y]->parent=x;
          			tree[y]->cs=vector<int>();
          		}else{
          			tree[y]->parent=x;
          		}
          	}
          	for(int i=1;i<=n;i++){
          		if(tree[i]->parent==0) {
          			cout<<i<<endl;
          			break;
          		}
          	}
          	int k=0;
          	for(int i=1;i<=n;i++) {
          		if(a<tree[i]->cs.size()){
          		a=tree[i]->cs.size();
          		k=i;
          		}
          		}
          	cout<<k<<endl;
          	for(int i=0;i<a;i++){
          		cout<<tree[k]->cs[i]<<" ";
          	}
          	return 0;
          }
          
          • 0
            @ 2025-2-19 19:05:55
            #include<bits/stdc++.h>
            using namespace std;
            int n,m,id;
            int to[110],ne[110],head[110];
            int a[110],v[110],b[110];
            void add(int x,int y)//链式前向星
            {
            	to[++id]=y;
              ne[id]=head[x];
              head[x]=id;
            }
            int main()
            {
            	cin >>n>>m;
            	for(int i=1;i<=m;i++)
            	{
            		int x,y;
            		cin >>x>>y;
            		a[x]++,v[y]=1;
            		add(x,y);
            	}
            	int maxx=-1,t1,t2;
            	for(int i=1;i<=n;i++)
            	{
            		if(v[i]==0)//找根
            		{
            			t1=i;
            		}
            		if(a[i]>maxx)//找max
            		{
            			maxx=a[i],t2=i;
            		}
            	}
            	cout <<t1<<endl;
            	cout <<t2<<endl;
            	int t=0;//排序
            	for(int i=head[t2];i;i=ne[i])  
            	{
            		b[++t]=to[i];
            	}
            	for(int i=t;i>=1;i--)
            	{
            		cout <<b[i]<<' ';
            	}
            	return 0;
             }
            • 0
              @ 2023-12-15 20:00:32
              #include<iostream>
              #include<vector>
              using namespace std;
              struct node{
                  vector<int> cs; 
                  int parent;
              };
              node* tree[101];
              
              int main(){
              	int m,n,a,b;
              	cin>>n>>m;
              	for(int i=1;i<=m;i++){
              		cin>>a>>b;
              		if(tree[a]==nullptr){
              			tree[a]=new node;
              			tree[a]->parent=0;
              			tree[a]->cs=vector<int>();
              			tree[a]->cs.push_back(b);
              		}
              		else{
              			tree[a]->cs.push_back(b);
              		}
              		if(tree[b]==nullptr){
              			tree[b]=new node;
              			tree[b]->parent=a;
              			tree[b]->cs=vector<int>();
              		}
              		else{
              			tree[b]->parent=a;
              		}
              	}
              	for(int i=1;i<=n;i++){
              		if(tree[i]->parent==0){
              			cout<<i<<endl;
              			break;
              		}
              	}
              	int s=0,v=0;
              	for(int i=1;i<=n;i++){
              		
              		if(tree[i]->cs.size()>s){
              			v=i;
              			s=tree[i]->cs.size();
              		}
              		
              	}
              	cout<<v<<endl;
              	for(int i=0;i<s;i++){
              
              	   cout<<tree[v]->cs[i]<<" ";
              }
              	
              	
              	
              	
              }
              
              • 0
                @ 2023-12-15 19:57:38
                #include <bits/stdc++.h>
                using namespace std;
                const int d=10;
                struct node{
                	int parent;
                	vector<int> cs;
                };
                node* tree[101];
                int main(){
                	int n,m,x,y;
                	cin>>n>>m;
                	for(int i=1;i<=m;i++){
                		cin>>x>>y;
                		if(tree[x]==nullptr){
                			tree[x]=new node;
                			tree[x]->parent=0;
                			tree[x]->cs=vector<int>();
                			tree[x]->cs.push_back(y);
                		}else{
                			tree[x]->cs.push_back(y);
                		}
                		if(tree[y]==nullptr){
                			tree[y]=new node;
                			tree[y]->parent=x;
                			tree[y]->cs=vector<int>();
                		}else{
                			tree[y]->parent=x;
                		}
                	} 
                	for(int i=1;i<=n;i++){
                		if(tree[i]->parent==0){
                		cout<<i<<endl; 
                		break;
                		}
                	}
                	int s=0,k=0;
                	for(int i=1;i<=n;i++){
                		if(tree[i]->cs.size()>s){
                		s=tree[i]->cs.size();
                		k=i;
                		}
                	}
                	cout<<k<<endl;
                	for(int i=0;i<s;i++){
                		cout<<tree[k]->cs[i]<<" ";
                	}
                	return 0;
                }
                
                • 0
                  @ 2023-12-15 19:39:13
                  #include<bits/stdc++.h>
                  using namespace std;
                  void YESorNO(bool a,string yes="YES",string no="NO",string end=""){
                  	if(a)
                  	cout<<yes<<end;
                  	else
                  	cout<<no<<end;
                  }
                  template<typename any>
                  struct tree{
                  	int dad=-1;
                  	int son[100];
                  	int sonum=0;
                  	any data;
                  };
                  template<typename any>
                  bool tcp(tree<any> a,tree<any> b,string k,bool x=1){
                  	if(x){
                  		if(k=="dad")
                  		return a.dad>b.dad;
                  		if(k=="sonum")
                  		return a.sonum>b.sonum;
                  		if(k=="data")
                  		return a.data>b.data;
                  		long long an,bn;
                  		string as,bs;
                  		for(int i=5;k[i]>='0'&&k[i]<='9';i++)
                  		as+=k[i];
                  		an=stoll(as,nullptr,10);
                  		for(int i=as.size()+2;k[i]>='0'&&k[i]<='9';i++)
                  		bs+=k[i];
                  		bn=stoll(bs,nullptr,10);
                  		return a.son[an]>b.son[bn];
                  	}
                  	if(k=="dad")
                  	return a.dad<b.dad;
                  	if(k=="sonum")
                  	return a.sonum<b.sonum;
                  	if(k=="data")
                  	return a.data<b.data;
                  	long long an,bn;
                  	string as,bs;
                  	for(int i=5;k[i]>='0'&&k[i]<='9';i++)
                  	as+=k[i];
                  	an=stoll(as,nullptr,10);
                  	for(int i=as.size()+2;k[i]>='0'&&k[i]<='9';i++)
                  	bs+=k[i];
                  	bn=stoll(bs,nullptr,10);
                  	return a.son[an]<b.son[bn];
                  }
                  int main(){
                  	int n,m;
                  	cin>>n>>m;
                  	tree<int> a[n+1];
                  	int numax=0;
                  	while(m--){
                  		int x,y;
                  		cin>>x>>y;
                  		a[x].son[a[x].sonum++]=y;
                  		a[y].dad=x;
                  		numax=max(max(numax,a[x].sonum),a[y].sonum);
                  	}
                  	bool x=1; 
                  	int I;
                  	for(int i=1;i<n+1;i++){
                  		if(x&&a[i].sonum==numax){
                  			I=i;
                  			x=0;
                  		}
                  		if(a[i].dad==-1){
                  			cout<<i<<"\n";
                  		}
                  	}
                  	cout<<I<<"\n";
                  	for(int i=0;i<a[I].sonum;i++)
                  	cout<<a[I].son[i]<<" ";
                  }
                  
                  • -1
                    @ 2023-12-15 21:35:20

                    #include <bits/stdc++.h> using namespace std; int a[100],b[100]; struct node{ int parent; vectorhz; }; node* tree[101]; int main(){ int n,m,x,y; cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x>>y; if(tree[x]nullptr) { tree[x]=new node; tree[x]->parent=0; tree[x]->hz=vector(); tree[x]->hz.push_back(y); } else { tree[x]->hz.push_back(y); } if(tree[y]=nullptr){ tree[y]=new node; tree[y]->parent=x; tree[y]->hz=vector(); } else { tree[y]->parent=x; } } for(int i=1;i<=n;i++) if(tree[i]->parent0){ cout<<i; break; }

                    }

                    • 1

                    Information

                    ID
                    821
                    Time
                    1000ms
                    Memory
                    256MiB
                    Difficulty
                    6
                    Tags
                    # Submissions
                    158
                    Accepted
                    46
                    Uploaded By