3 条题解
-
2
#include<bits/stdc++.h> #define endl "\n" using namespace std; vector<int> e[100005]; bool vis[100005];//用于找根节点 int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m; cin>>n>>m; for(int i=1;i<=m;i++) { int x,y; cin>>x>>y; e[x].push_back(y); vis[y]=1; } int maxx=1; for(int i=1;i<=n;i++) { sort(&e[i][0],&e[i][e[i].size()]);//对子节点排序 if(e[i].size()==e[maxx].size()) if(i<maxx) maxx=i;//取较小的节点 if(e[i].size()>e[maxx].size()) maxx=i; } int ans; for(int i=1;i<=n;i++) if(vis[i]==0) ans=i; cout<<ans<<endl; cout<<maxx<<endl; for(int i=0;i<e[maxx].size();i++) cout<<e[maxx][i]<<" "; return 0; }
-
2
#include <bits/stdc++.h> using namespace std; int n, m; int x[205], y[205]; //第i条边的起点是 x[i] 终点是 y[i] int cnt[205]; //统计每个节点有多少孩子 int ch[205], tot; //有tot个孩子,分别是 ch[1]~ch[tot] int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= m; i++) cin >> x[i] >> y[i]; //找根 int root = (1 + n) * n / 2; for (int i = 1; i <= m; i++) root -= y[i]; //找孩子最多的节点 for (int i = 1; i <= m; i++) cnt[x[i]]++; int maxI = 1; for (int i = 2; i <= n; i++) if (cnt[i] > cnt[maxI]) maxI = i; //找到maxI的所有孩子 tot = 0; for (int i = 1; i <= m; i++) if (x[i] == maxI) { tot++; ch[tot] = y[i]; } sort(ch + 1, ch + tot + 1); //输出 cout << root << endl; cout << maxI << endl; for (int i = 1; i <= tot; i++) cout << ch[i] << " "; return 0; }
-
1
vecotr动态数组写法
#include<bits/stdc++.h> using namespace std; int m,n; //m边 n节点 vector<int> e[110]; bool pd[110]; int main() { cin>>n>>m; int father,son; //输入用 for(int i=1;i<=m;i++) { cin>>father>>son; e[father].push_back(son); pd[son]=1; } int gen; //存储根节点 for(int i=1;i<=n;i++) if(pd[i]==0) { gen=i; cout<<gen<<'\n'; break; }//找根节点 int maxx=0,pos; //存储 拥有 最多子节点 的 节点,以及节点的位置 for(int i=1;i<=n;i++) { if(e[i].size()>maxx) { maxx=(int)e[i].size(); pos=i; } } //找最多子节点 cout<<pos<<'\n'; sort(e[pos].begin(),e[pos].end()); //要求按照从小到大输出 for(int i=0;i<(int)e[pos].size();i++) cout<<e[pos][i]<<" "; return 0; }
- 1
信息
- ID
- 555
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 72
- 已通过
- 37
- 上传者