目录
2.Lowest Price in Supply Chain
1.The Largest Generation
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=110;
vector<int> node[maxn];
int hashtable[maxn] = {0};
void dfs(int index,int level){
hashtable[level]++;
for(int j=0;j<node[index].size();j++){
dfs(node[index][j],level+1);
}
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int parent,k,child;
for(int i=0;i<m;i++){
scanf("%d%d",&parent,&k);
for(int j=0;j<k;j++){
scanf("%d",&child);
node[parent].push_back(child);
}
}
dfs(1,1);
int maxvalue=0,maxlevel=-1;
for(int i=1;i<maxn;i++){
if(hashtable[i]>maxvalue){
maxlevel=i;
maxvalue=hashtable[i];
}
}
printf("%d %d\n",maxvalue,maxlevel);
return 0;
}
2.Lowest Price in Supply Chain
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=100010;
const int INF = 10000;
vector<int> node[maxn];
int n,num=0;
double p,r,ans=INF;
void dfs(int index,int depth){
if(node[index].size()==0){
double price=p*pow(1+r,depth);
if(price<ans){
ans=price;
num=1;
}else if(price==ans){
num++;
}
return;
}
for(int i=0;i<node[index].size();i++){
dfs(node[index][i],depth+1);
}
}
int main(){
scanf("%d%lf%lf",&n,&p,&r);
r/=100;
int k,child;
for(int i=0;i<n;i++){
scanf("%d",&k);
if(k!=0){
for(int j=0;j<k;j++){
scanf("%d",&child);
node[i].push_back(child);
}
}
}
dfs(0,0);
printf("%.4f %d\n",ans,num);
return 0;
}
3.Counting Leaves(dfs)
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 110;
vector<int> node[N];
int leaf[N] = {0};
int max_h=1;
void dfs(int index,int h){
max_h=max(h,max_h);//统计一下树的深度罢了
if(node[index].size()==0){
leaf[h]++;
return;
}
for(int i=0;i<node[index].size();i++){
dfs(node[index][i],h+1);
}
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
int parent,k,child;
for(int i=0;i<m;i++){
scanf("%d%d",&parent,&k);
for(int j=0;j<k;j++){
scanf("%d",&child);
node[parent].push_back(child);
}
}
dfs(1,1);
printf("%d",leaf[1]);
for(int i=2;i<=max_h;i++){
printf(" %d",leaf[i]);
}
return 0;
}
4.Counting Leaves(bfs)
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int N = 105;
vector<int> node[N];
int h[N] = {0};
int leaf[N] = {0};
int max_h = 0;
void bfs(){
queue<int> q;
q.push(1);
while(!q.empty()){
int id=q.front();
q.pop();
max_h=max(max_h,h[id]);
if(node[id].size()==0){
leaf[h[id]]++;
}
for(int i=0;i<node[id].size();i++){
h[node[id][i]] = h[id]+1;
q.push(node[id][i]);
}
}
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int parent,k,child;
for(int i=0;i<m;i++){
scanf("%d%d",&parent,&k);
for(int j=0;j<k;j++){
scanf("%d",&child);
node[parent].push_back(child);
}
}
h[1] = 1;
bfs();
for(int i=1;i<=max_h;i++){
if(i==1) printf("%d",leaf[i]);
else printf(" %d",leaf[i]);
}
return 0;
}