B题:Boundary
C题:Cover the Tree
理解题意可知输出为最少的路径,路径包含所有边,路径可以相交(参考博客:CSDN
)
运行代码:
#include<stdio.h>
#define N 200001
int n,x,y,d[N];
int flag=0;
int ans[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&x,&y);
d[x]++,d[y]++;
}
for(int i=1;i<=n;i++)
{
if(d[i]==1)
{
ans[flag]=i;
flag++;
}
}
printf("%d\n",(flag+1)/2);
for(int i=0;i<(flag+1)/2;i++)
{
printf("%d %d\n",ans[i],ans[i+flag/2]);
}
return 0;
}
D题:Duration
这道题很容易理解题意,直接上代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int h1,m1,s1;
int h2,m2,s2;
int main()
{
scanf("%d:%d:%d",&h1,&m1,&s1);
scanf("%d:%d:%d",&h2,&m2,&s2);
ll sum1,sum2;
sum1=h1*60*60+m1*60+s1;
sum2=h2*60*60+m2*60+s2;
cout<<abs(sum1-sum2);
return 0;
}