曹老师 @ 2018-10-19 20:18:45
为什么要说也呢?
话说
by 曹老师 @ 2018-10-19 20:19:44
80分210+行代码占沙发
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
struct Node {
int to , next;
};
Node e[200005];
int n , m;
vector<int>map[100005];
int val2[100005] , opt2[100005];
int head[100005] , tot , deep[100005] , val4[100005] , num[200005];
void sol1() {
int val[1005] , opt[1005];
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
}
memset(opt , 0 , sizeof(opt));
for(int i=1; i<=n; i++)
scanf("%d",&val[i]);
for(int i=1; i<=m; i++) {
int x , y;
scanf("%d%d",&x,&y);
if(!val[x])
opt[x]++;
}
for(int i=1; i<=n; i++)
printf("%d ",opt[i]);
}
void sol2() {
int ans = 0 , opt[1005];
memset(opt , 0 , sizeof(opt));
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
}
for(int i=1; i<=n; i++) {
int x;
scanf("%d",&x);
}
for(int i=1; i<=m; i++) {
int s , t;
scanf("%d%d",&s,&t);
opt[s]++;
}
for(int i=1; i<=n; i++)
printf("%d ",opt[i]);
}
void sol3() {
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
}
for(int i=1; i<=n; i++)
scanf("%d",&val2[i]);
for(int i=1; i<=n; i++) {
int s , t;
scanf("%d%d",&s,&t);
map[s].push_back(t);
}
for(int i=1; i<=n; i++) {
int ans = 0 , l = i - val2[i] , r = i + val2[i] , sz1 , sz2;
if(l>0) {
sz1 = map[l].size();
for(int j=0; j<sz1; j++)
if(map[l][j]>=i)
ans++;
}
if(r<=n) {
sz2 = map[r].size();
for(int j=0; j<sz2; j++)
if(map[r][j]<=i)
ans++;
}
opt2[i] = ans;
}
for(int i=1; i<=n; i++)
printf("%d ",opt2[i]);
}
void add(int x , int y) {
tot++;
e[tot].next = head[x];
e[tot].to = y;
head[x] = tot;
}
void dfs(int u , int f) {
for(int i=head[u]; i; i=e[i].next) {
int v = e[i].to;
if(v==f)
continue;
deep[v] = deep[u] + 1;
dfs(v , u);
num[u] += num[v];
}
}
void sol4() {
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
add(x , y);
add(y , x);
}
for(int i=1; i<=n; i++)
scanf("%d",&val4[i]);
for(int i=1; i<=m; i++) {
int s , t;
scanf("%d%d",&s,&t);
num[t]++;
}
deep[1] = 0;
dfs(1 , 0);
for(int i=1; i<=n; i++) {
if(deep[i]==val4[i])
printf("%d ",num[i]);
else
printf("0 ");
}
}
int dfs1(int u , int f , int aim , int dfn) {
if(u==aim) {
if(dfn==val2[u])
opt2[u]++;
return 1;
}
for(int i=head[u]; i; i=e[i].next) {
int v = e[i].to;
if(v==f)
continue;
if(dfs1(v , u , aim , dfn+1)) {
if(dfn==val2[u]) {
opt2[u]++;
}
return 1;
}
}
}
void sol5() {
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
add(x , y);
add(y , x);
}
for(int i=1; i<=n; i++)
scanf("%d",&val2[i]);
for(int i=1; i<=m; i++) {
int s , t;
scanf("%d%d",&s,&t);
dfs1(s , 0 , t , 0);
}
for(int i=1; i<=n; i++)
printf("%d ",opt2[i]);
}
void dfs2(int u , int f , int dep) {
int temp = num[dep+val2[u]];
if(val4[u])
num[dep] += val4[u];
for(int i=head[u]; i; i=e[i].next) {
int v = e[i].to;
if(v == f)
continue;
dfs2(v , u , dep+1);
}
opt2[u] = num[dep+val2[u]] - temp;
}
void sol6() {
for(int i=1; i<n; i++) {
int x , y;
scanf("%d%d",&x,&y);
add(x , y);
add(y , x);
}
for(int i=1; i<=n; i++)
scanf("%d",&val2[i]);
for(int i=1; i<=m; i++) {
int s , t;
scanf("%d%d",&s,&t);
val4[s]++;
}
dfs2(1 , 0 , 0);
for(int i=1; i<=n; i++)
printf("%d ",opt2[i]);
}
int main() {
scanf("%d%d",&n,&m);
if(n%10==1)
sol1();
if(n%10==2)
sol2();
if(n%10==4)
sol3();
if(n%10==5)
sol4();
if(n%10==3)
sol5();
if(n%10==6)
sol6();
return 0;
}
by wwz20050323 @ 2018-10-19 20:20:16
tql
by 皎月半洒花 @ 2018-10-19 20:20:44
好腻害的样子qaq
by hfee @ 2018-10-19 20:21:10
dldl
by 曹老师 @ 2018-10-19 20:21:57
@皎月半洒花 花姐永远最强
by 皎月半洒花 @ 2018-10-19 21:18:14
@曹老师 别乱奶啊qaq
by 逍遥_向尾喵 @ 2018-10-19 21:33:45
好厉害,——_——|||
by qsmoonzh @ 2018-11-04 22:47:19
@曹老师 码量好大啊
by qsmoonzh @ 2018-11-04 22:48:08
WA,居然还有这种东西
提示: 数据范围的个位上的数字可以帮助判断是哪一种数据类型。
by Thaumaturge @ 2019-07-05 20:38:19
(针对数据)就算啥也不会也能骗到80分,太给力了qwq