13 solutions
-
5
#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
短小、精悍!!!!!!
#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
#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
操作有点像桶(反正也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;//完结散花 }
-
1
#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
#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
//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
#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
#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
#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
#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
#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
#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