Captain Flint and Crew Recruitment
#include<bits/stdc++.h> #include<queue> #include<vector> using namespace std; typedef long long ll; const int N=2e5+2; typedef long long ll; const ll inf=1e18; int tpflag; int n,k; int tp[N]; char a[N],b[N]; queue<int>q; vector<int>son[N]; int ans; int main() { int t;cin>>t; while(t--) { int n;cin>>n; if(n<=30) printf("NO\n"); else { int b=n-30; if(b!=14&&b!=10&&b!=6) { printf("YES\n"); printf("14 10 6 %d\n",b); } else { printf("YES\n"); printf("15 10 6 %d\n",b-1); } } } }
Captain Flint and a Long Voyage
#include<bits/stdc++.h> #include<queue> #include<vector> using namespace std; typedef long long ll; const int N=2e5+2; typedef long long ll; const ll inf=1e18; int tpflag; int n,k; int tp[N]; char a[N],b[N]; queue<int>q; vector<int>son[N]; int ans; int main() { int t;cin>>t; while(t--) { int n;cin>>n; if(n<=4) { for(int i=0;i<n-1;i++) printf("9"); printf("8"); } else { int b=n/4; if(n%4==0) b=b-1; for(int i=0;i<n-b-1;i++) printf("9"); for(int i=0;i<b+1;i++) printf("8"); } printf("\n"); } }
Uncle Bogdan and Country Happines
建树,双向边
dfs
判断条件搞清楚
#include<bits/stdc++.h> #include<queue> #include<vector> using namespace std; typedef long long ll; const int N=2e5+2; typedef long long ll; const ll inf=1e18; int dp[N][5]; int p[N],h[N]; queue<int>q; vector<int>s[N]; int f=1; void dfs(int son,int ba) { if(s[son].size()==1&&son!=1) { if(p[son]<abs(h[son])) {f=0;} if((p[son]+h[son])%2==1) {f=0;} dp[son][1]=(p[son]+h[son])/2; dp[son][2]=p[son]-dp[son][1]; return; } for(int i=0;i<s[son].size();i++) { if(s[son][i]==ba) continue; dfs(s[son][i],son); dp[son][1]+=dp[s[son][i]][1]; dp[son][2]+=dp[s[son][i]][2]; } int sum=dp[son][1]+dp[son][2]+p[son]; int x=(sum+h[son])/2; dp[son][2]=sum-x; if(sum<abs(h[son])) {f=0;} if((sum+h[son])%2==1) f=0; if(x<dp[son][1]) f=0; dp[son][1]=x; } int main() { int t;cin>>t; while(t--) { f=1; int n,m; cin>>n>>m; for(int i=1;i<=n;i++) {dp[i][1]=dp[i][2]=0;scanf("%lld",&p[i]);} for(int i=1;i<=n;i++) scanf("%lld",&h[i]); for(int i=1;i<=n-1;i++) { int a,b;cin>>a>>b; s[a].push_back(b); s[b].push_back(a); } dfs(1,0); if(f) printf("YES\n"); else printf("NO\n"); for(int i=1;i<=n;i++) { dp[i][1]=dp[i][2]=0; s[i].clear(); } } }
Codeforces Round #660 (Div. 2)
原文:https://www.cnblogs.com/hahaee/p/13449344.html