1 条题解
-
0
C++ :
#include<iostream> #include<set> using namespace std; int main(){ int n,m; cin>>n>>m; int father[n+1]; //存父亲下标的数组 双亲表示法 set<int> CH[n+1]; //为每个节点开一个set 存储它的孩子 for(int i=1;i<=n;i++) father[i]=-1; int x,y; for(int i=0;i<m;i++) { cin>>x>>y; father[y]=x; CH[x].insert(y); } for(int i=1;i<=n;i++) if(father[i]==-1) cout<<i<<endl; int max=0; for(int i=1;i<=n;i++) //扫描一次,统计最大值 if(CH[i].size()>max) max=CH[i].size(); for(int i=1;i<=n;i++) if(CH[i].size()==max){ cout<<i<<endl; set<int>::iterator it; for(it=CH[i].begin();it!=CH[i].end();it++) cout<<*it<<' '; cout<<endl; } //cout<<i<<':'<<CH[i].size()<<endl; return 0; }
Pascal :
program qi26791; type treetype=record father:longint; num:longint; child:array[1..100]of longint; end; var tree:array[1..100]of treetype; n,m:longint; procedure du; var i,j,k,x,y:longint; begin read(n,m); for i:= 1 to m do begin read(x,y); tree[y].father:=x; inc(tree[x].num); tree[x].child[tree[x].num]:=y; end; end; function root:longint; var i:longint; begin for i:= 1 to n do if tree[i].father=0 then begin root:=i; exit; end; end; function find:longint; var max,k,i,j:longint; begin max:=0; k:=0; for i:= 1 to n do if tree[i].num>max then begin k:=i; max:=tree[i].num; end; writeln(k); for i:= 1 to max-1 do write(tree[k].child[i],' '); writeln(tree[k].child[max]); for i:= 1 to n do if (tree[i].num=max)and(i<>k) then begin writeln(i); for j:= 1 to max-1 do write(tree[i].child[j],' '); writeln(tree[i].child[max]); end; end; begin du; writeln(root); find; end.
- 1
信息
- ID
- 3525
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者