poj1741

题:http://poj.org/problem?id=1741

题意:给定树,和一个树k,问有多少个点对之间的路径是不超过k

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=1e18;
int ans=,tot,maxx,root;
const int M=1e4+;
struct node{
int v,w,nextt;
}e[M<<];
int head[M],vis[M],sz[M],maxv[M],num,dis[M],n,k;
void addedge(int u,int v,int w){
e[tot].v=v;
e[tot].w=w;
e[tot].nextt=head[u];
head[u]=tot++;
}
void dfssz(int u,int f){
sz[u]=;
maxv[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;//cout<<"!!"<<endl;
if(v==f||vis[v])
continue;
dfssz(v,u);
sz[u]+=sz[v];
maxv[u]=max(maxv[u],sz[v]);
}
}
void dfsroot(int r,int u,int f){
maxv[u]=max(maxv[u],sz[r]-sz[u]);
if(maxv[u]<maxx){
maxx=maxv[u];
root=u;
}
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v]||v==f)
continue;
dfsroot(r,v,u);
}
}
void dfsdis(int u,int d,int f){
dis[num++]=d;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v==f||vis[v])
continue;
dfsdis(v,d+e[i].w,u);
}
}
int cal(int u,int d){
int sum=;
num=;
dfsdis(u,d,-);
sort(dis,dis+num);
int i=,j=num-;
while(i<j){
while(dis[i]+dis[j]>k&&i<j){
j--;
}
sum+=j-i;
i++;
}
return sum;
}
void solve(int u){
maxx=n;
dfssz(u,-);
dfsroot(u,u,-);
ans+=cal(root,); vis[root]=;
for(int i=head[root];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v])
continue;
ans-=cal(v,e[i].w);
solve(v);
}
}
int main(){
while(~scanf("%d%d",&n,&k)&&(n+k)){
tot=,ans=;
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
for(int i=;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
} solve();
printf("%lld\n",ans);
}
return ;
}

poj1987

题:http://poj.org/problem?id=1987

和上面一样的题意,不一样的写法

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
using namespace std;
const int M=2e5+;
const int inf=0x3f3f3f3f;
typedef long long ll;
char s[];
ll ans;
int num,n,m;
ll sz[M],maxv[M],dis[M],k;
int maxx,vis[M],head[M],reco,total,tot,root;
struct node{
int v,nextt;
ll w;
}e[M<<];
void addedge(int u,int v,int w){
e[tot].v=v;
e[tot].w=w;
e[tot].nextt=head[u];
head[u]=tot++;
}
void addedge(int u,int v){
e[tot].v=v;
e[tot].nextt=head[u];
head[u]=tot++;
} void dfsroot(int u,int f){
sz[u]=;
ll maxson=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
dfsroot(v,u);
sz[u]+=sz[v];
maxson=max(maxson,sz[v]);
}
}
maxson=max(maxson,total-sz[u]);
if(maxson<reco)
root=u,reco=maxson;
} void dfsdis(int u,int f,ll d){
dis[num++]=d;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v==f||vis[v])
continue;
dfsdis(v,u,d+e[i].w);
}
}
ll cal(int u,int f,ll d){
ll sum=;
num=;
dfsdis(u,f,d);
sort(dis,dis+num);
int i=,j=num-;
while(i<j){
while(dis[i]+dis[j]>k&&i<j){
j--;
}
sum+=1ll*(j-i);
i++;
}
return sum;
}
void doit(int u,int f){
///跨越u的路径和在同一个子树中的路径
ans+=cal(u,f,);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
///因为同一个子树中的路径在dfs下去的时候会被算到,所以要减去被预先算过的
if(v!=f&&!vis[v]){
ans-=cal(v,u,e[i].w);
}
}
}
void solve(int u,int f){
vis[u]=;
doit(u,f);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
total=sz[v];
reco=inf;
dfsroot(v,u);
solve(root,);
}
}
}
int main(){
scanf("%d%d",&n,&m);
memset(head,-,sizeof(head));
while(m--){
int u,v;
ll w;
scanf("%d%d%lld%s",&u,&v,&w,s); addedge(u,v,w);
addedge(v,u,w);
}
scanf("%lld",&k);
total=n;
reco=inf;
dfsroot(,);
solve(root,);
printf("%lld\n",ans);
return ;
}

题:https://www.luogu.org/problem/P4149

题意:给定固定路径长,边数最少路径

#include<bits/stdc++.h>
using namespace std;
const int M=2e5+;
const int inf=0x3f3f3f3f;
const int N=1e6+;
int vis[M],temp[N],sz[M],head[M];
int n,k,total,reco,root;
int ans,tot;
#define pb push_back
struct node{
int u,v,w,nextt;
}e[M<<];
void addedge(int u,int v,int w){
e[tot].v=v;
e[tot].w=w;
e[tot].nextt=head[u];
head[u]=tot++;
}
void dfsroot(int u,int f){
int maxx=;
sz[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
dfsroot(v,u);
sz[u]+=sz[v];
maxx=max(maxx,sz[v]);
}
}
maxx=max(maxx,total-sz[u]);
if(reco>maxx)
reco=maxx,root=u;
}
void cal(int u,int f,int d,int num){
if(d>k)
return ;
ans=min(ans,temp[k-d]+num);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
cal(v,u,d+e[i].w,num+);
}
}
}
void update(int u,int f,int d,int num){
if(d>k)
return ;
temp[d]=min(temp[d],num);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
update(v,u,d+e[i].w,num+);
}
}
}
void Clear(int u,int f,int d){
if(d>=k)
return ;
temp[d]=inf;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
Clear(v,u,d+e[i].w);
}
}
}
void dfs1(int u,int f){
sz[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
dfs1(v,u);
}
}
}
void doit(int u,int f){
dfs1(u,f);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
cal(v,u,e[i].w,);
update(v,u,e[i].w,);
}
}
Clear(u,f,);
}
void solve(int u,int f){
vis[u]=;
temp[]=;
doit(u,f);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
total=sz[v];
reco=inf;
dfsroot(v,u);
solve(root,);
}
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
head[i]=-;
for(int i=;i<=k;i++)
temp[i]=inf;
for(int u,v,w,i=;i<n;i++){
scanf("%d%d%d",&u,&v,&w);
u++,v++;
addedge(u,v,w);
addedge(v,u,w);
}
total=n;
reco=inf;
ans=inf;
dfsroot(,);
solve(root,);
if(ans==inf)
puts("-1");
else
printf("%d\n",ans);
return ;
}

题(求点权处理的题):http://acm.hdu.edu.cn/showproblem.php?pid=4812

题意:给定一棵 n 个点的树,每个点有权值 Vi,问是否存在一条路径使得路径上所有点的权值乘积 mod(10^6 + 3) 为 K,输出路径的首尾标号,若有多解,输出字典序最小的解

注意:更新就更新以重点为起点的路径,枚举答案时则用以重点孩子为起点的路径

除法,逆元处理

#pragma comment(linker,"/STACK:102400000,102400000")
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define pb push_back
typedef long long ll;
const int M=1e5+;
const int mod=1e6+;
const int inf=0x3f3f3f3f;
int reco,total,root,n;
ll k;
ll sz[M],a[M],vis[M];
int ansi,ansj;
int temp[mod+];
struct node{
int v,nextt;
}e[M<<];
int head[M];
int tot;
int inv[mod+];
void addedge(int u,int v){
e[tot].v=v;
e[tot].nextt=head[u];
head[u]=tot++;
}
void iniInv(){
inv[]=;
for(int i=;i<mod;i++)
inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
}
void dfsroot(int u,int f){
sz[u]=;
ll maxson=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
dfsroot(v,u);
sz[u]+=sz[v];
maxson=max(maxson,sz[v]);
}
}
maxson=max(maxson,total-sz[u]);
if(maxson<reco)
root=u,reco=maxson;
}
void up(int x,int y){
int minn=min(x,y);
int maxx=max(x,y);
if(minn<ansi){
ansi=minn,ansj=maxx;
}
else if(minn==ansi){
if(maxx<ansj)
ansj=maxx;
}
}
void cal(int u,int f,int d){
int x=temp[k*inv[d]%mod];
if(x)
up(u,x); for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
cal(v,u,d*a[v]%mod);
}
}
}
void update(int u,int f,int d){
if(!temp[d])
temp[d]=u;
else
temp[d]=min(temp[d],u);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
update(v,u,d*a[v]%mod);
}
}
}
void del(int u,int f,int d){
temp[d]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
del(v,u,d*a[v]%mod);
}
}
}
void doit(int u,int f){
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]){
cal(v,u,a[v]);
update(v,u,a[u]*a[v]%mod);
}
}
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]){
del(v,u,a[u]*a[v]%mod);
}
}
}
void solve(int u,int f){
vis[u]=;
temp[a[u]]=u;
doit(u,f);
temp[a[u]]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(!vis[v]&&v!=f){
reco=inf;
total=sz[v];
dfsroot(v,u);
solve(root,);
}
}
}
int main(){
// freopen("in","r",stdin);
iniInv(); while(scanf("%d%lld",&n,&k)!=EOF){
tot=;
memset(head,-,sizeof(head));
for(int i=;i<=n;i++)
scanf("%d",&a[i]),vis[i]=;
memset(temp,,sizeof(temp)); for(int u,v,i=;i<n;i++){
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
ansi=ansj=inf;
reco=inf;
total=n;
dfsroot(,);
solve(root,);
if(ansi==inf){
puts("No solution");
}
else{
printf("%d %d\n",ansi,ansj);
}
}
return ;
}

bzoj 2152

题:https://www.lydsy.com/JudgeOnline/problem.php?id=2152

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=2e4+;
struct node{
int v,nextt;
int w;
}e[M<<];
int head[M],dis[],sz[M],maxv[M],vis[M],n,tot,fenzi,maxx,root;
void addedge(int u,int v,int w){
e[tot].v=v;
e[tot].nextt=head[u];
e[tot].w=w;
head[u]=tot++;
}
void dfssz(int u,int f){
maxv[u]=;
sz[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v==f||vis[v])
continue;
dfssz(v,u);
sz[u]+=sz[v];
maxv[u]=max(maxv[u],sz[v]);
}
}
void dfsroot(int r,int u,int f){
maxv[u]=max(maxv[u],sz[r]-sz[u]);
if(maxx>maxv[u]){
maxx=maxv[u];
root=u;
}
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v==f||vis[v])
continue;
dfsroot(r,v,u);
}
}
void dfsdis(int u,int f,int d){
dis[d%]++;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v]||v==f)
continue;
dfsdis(v,u,(d+e[i].w)%);
}
}
ll cal(int u,int d){
dis[]=dis[]=dis[]=;
dfsdis(u,-,d);
ll sum=;
for(int i=;i<;i++)
for(int j=;j<;j++)
if((i+j)%==)
sum+=dis[i]*dis[j];
return sum;
}
void solve(int u){
maxx=n;
dfssz(u,-);
dfsroot(u,u,-);
fenzi+=cal(root,);
vis[root]=;
for(int i=head[root];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v])
continue;
fenzi-=cal(v,e[i].w);
solve(v);
}
}
int main(){
scanf("%d",&n);
memset(head,-,sizeof(head));
for(int i=;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
solve();
int fenmu=n*n;
//cout<<fenmu<<endl;
int g=__gcd(fenzi,fenmu);
printf("%d/%d",fenzi/g,fenmu/g);
return ;
}

题:https://ac.nowcoder.com/acm/contest/1099/I

题意:找出路径和为2019倍数的路径

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=1e18;
ll ans=;
int tot,maxx,root;
const int M=2e4+;
struct node{
int v,w,nextt;
}e[M<<];
int head[M],vis[M],sz[M],maxv[M],dis[],n;
void addedge(int u,int v,int w){
e[tot].v=v;
e[tot].w=w;
e[tot].nextt=head[u];
head[u]=tot++;
}
void dfssz(int u,int f){
sz[u]=;
maxv[u]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;//cout<<"!!"<<endl;
if(v==f||vis[v])
continue;
dfssz(v,u);
sz[u]+=sz[v];
maxv[u]=max(maxv[u],sz[v]);
}
}
void dfsroot(int r,int u,int f){
maxv[u]=max(maxv[u],sz[r]-sz[u]);
if(maxv[u]<maxx){
maxx=maxv[u];
root=u;
}
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v]||v==f)
continue;
dfsroot(r,v,u);
}
}
void dfsdis(int u,int d,int f){
dis[d%]++;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v==f||vis[v])
continue;
dfsdis(v,(d+e[i].w)%,u);
}
}
ll cal(int u,int d){
ll sum=;
for(int i=;i<=;i++)
dis[i]=;
dfsdis(u,d,-);
for(int i=;i<;i++){
if(dis[i]==||dis[(-i)%]==)
continue;
sum+=1ll*dis[i]*(dis[(-i)%]);
}
// mp.clear();
return sum;
}
void solve(int u){
maxx=n;
dfssz(u,-);
dfsroot(u,u,-);
ans+=cal(root,); vis[root]=;
for(int i=head[root];~i;i=e[i].nextt){
int v=e[i].v;
if(vis[v])
continue;
ans-=cal(v,e[i].w);
solve(v);
}
}
int main(){
while(~scanf("%d",&n)){
tot=,ans=0ll;
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
for(int i=;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
} solve();
printf("%lld\n",(ans-n)/);//要减去自己到自己的贡献
}
return ;
}

点分治好题:https://www.luogu.org/problem/P2664

最终思考于:https://blog.csdn.net/wu_tongtong/article/details/78963542

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int M=2e5+;
int reco,total;
ll sz[M];
int head[M],C[M],vis[M],cnt[M],maxv[M],n,tot,root,num,sum,tt;
ll ans[M],col[M];
struct node{
int v,nextt;
}e[M<<];
void addedge(int u,int v){
e[tot].v=v;
e[tot].nextt=head[u];
head[u]=tot++;
}
void dfsroot(int u,int f){
sz[u]=;
ll maxson=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
dfsroot(v,u);
sz[u]+=sz[v];
maxson=max(maxson,sz[v]);
}
}
maxson=max(maxson,total-sz[u]);
if(maxson<reco)
root=u,reco=maxson;
}
void dfs1(int u,int f){
sz[u]=;
cnt[C[u]]++;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
dfs1(v,u);
sz[u]+=sz[v];
}
}
if(cnt[C[u]]==){
sum+=sz[u];
col[C[u]]+=sz[u];
}
cnt[C[u]]--; }
void change(int u,int f,int sign){
cnt[C[u]]++;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v])
change(v,u,sign);
}
if(cnt[C[u]]==){
sum+=1ll*sign*sz[u];
col[C[u]]+=1ll*sign*sz[u];
}
cnt[C[u]]--;
}
void dfs2(int u,int f){
cnt[C[u]]++;
if(cnt[C[u]]==){
sum-=col[C[u]];
num++;
}
ans[u]+=1ll*sum+num*tt;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
dfs2(v,u);
}
}
if(cnt[C[u]]==){
sum+=col[C[u]];
num--;
}
cnt[C[u]]--;
}
void cle(int u,int f){
cnt[C[u]]=;
col[C[u]]=;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v])
cle(v,u);
}
}
void doit(int u,int f){
dfs1(u,f);
ans[u]+=(ll)sum;
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
cnt[C[u]]++;
col[C[u]]-=sz[v];
sum-=sz[v];
change(v,u,-);
cnt[C[u]]--; tt=sz[u]-sz[v];
dfs2(v,u); cnt[C[u]]++;
col[C[u]]+=sz[v];
sum+=sz[v];
change(v,u,);
cnt[C[u]]--;
}
}
sum=num=;
cle(u,f);
}
void solve(int u,int f){ vis[u]=;
doit(u,f);
for(int i=head[u];~i;i=e[i].nextt){
int v=e[i].v;
if(v!=f&&!vis[v]){
total=sz[v];
reco=inf;
dfsroot(v,u);
solve(root,);
}
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
head[i]=-;
for(int i=;i<=n;i++)
scanf("%d",&C[i]);
for(int u,v,i=;i<n;i++){
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
total=n;
reco=inf;
dfsroot(,);
solve(root,);
for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
return ;
}

树分治(挑战p360)的更多相关文章

  1. HDU4871 Shortest-path tree(树分治)

    好久没做过树分治的题了,对上一次做是在南京赛里跪了一道很裸的树分治题后学的一道,多校的时候没有看这道题,哪怕看了感觉也看不出来是树分治,看出题人给了解题报告里写了树分治就做一下好了. 题意其实就是给你 ...

  2. HDU4670 Cube number on a tree 树分治

    人生的第一道树分治,要是早点学我南京赛就不用那么挫了,树分治的思路其实很简单,就是对子树找到一个重心(Centroid),实现重心分解,然后递归的解决分开后的树的子问题,关键是合并,当要合并跨过重心的 ...

  3. POJ 1741 Tree【树分治】

    第一次接触树分治,看了论文又照挑战上抄的代码,也就理解到这个层次了.. 以后做题中再慢慢体会学习. 题目链接: http://poj.org/problem?id=1741 题意: 给定树和树边的权重 ...

  4. hdu-5977 Garden of Eden(树分治)

    题目链接: Garden of Eden Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  5. 【BZOJ-1468】Tree 树分治

    1468: Tree Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1025  Solved: 534[Submit][Status][Discuss] ...

  6. HDU 4812 D Tree 树分治+逆元处理

    D Tree Problem Description   There is a skyscraping tree standing on the playground of Nanjing Unive ...

  7. BZOJ 2152: 聪聪可可 树分治

    2152: 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...

  8. POJ 1741 Tree 树分治

    Tree     Description Give a tree with n vertices,each edge has a length(positive integer less than 1 ...

  9. UVALive 7148 LRIP【树分治+线段树】

    题意就是要求一棵树上的最长不下降序列,同时不下降序列的最小值与最大值不超过D. 做法是树分治+线段树,假设树根是x,y是其当前需要处理的子树,对于子树y,需要处理出两个数组MN,MX,MN[i]表示以 ...

  10. BZOJ 2566 xmastree(树分治+multiset)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2566 题意:一棵有边权的树.结点有颜色.每次修改一个点的颜色.求每次修改后所有同色 ...

随机推荐

  1. tensorflow中的神经网络笔记

    1.NN----神经网络 2.CNN卷积神经网络 CNN网络一共有5个层级结构: 输入层 卷积层 激活层 池化层 全连接FC层 一.输入层 与传统神经网络/机器学习一样,模型需要输入的进行预处理操作, ...

  2. GPU 、APU、CUDA、TPU、FPGA介绍

    购买显卡主要关注:显存.带宽和浮点运算数量   GPU :图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心.视觉处理器.显示芯片,是一种专门在个人电脑. ...

  3. Java算法练习——两数之和

    题目链接 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  4. 1月18日 LCA专项训练

    A. Lorenzo Von Matterhorn B.Minimum spanning tree for each edge C.Misha, Grisha and Underground D.Fo ...

  5. 寒假day13

    今天看了计算机网络的相关面试题

  6. Redis的数据结构和对象。

    一.简单动态字符串(simple dynamic string--SDS) Redis使用SDS表示字符串值,键值对都用SDS实现.SDS中的字符数组buf以空字符串结尾,好处是可以直接重用一部分C字 ...

  7. POJ 1789:Truck History

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21376   Accepted: 8311 De ...

  8. 关于scala工程结构(使用sbt)

    scala_project:常用目录结构: |lib:手动添加依赖包 |project | |build.properties:build的版本号,可以不写,会自动下载 | |plugins.sbt: ...

  9. PCB上LED指示灯电流、电压总结

    一般指示灯正常发光的电流在10~20mA,低电流LED灯的工作电流在2mA一下,亮度和普通的一样. 压降                    电流 红色         1.82~1.88V     ...

  10. 和我一起从0学算法(C语言版)(三)

    第二章 暴力求解(枚举法) 第一节 小学奥数题-程序求解 观察下面的加法算式:       祥 瑞 生 辉   +   三 羊 献 瑞 -------------------    三 羊 生 瑞 气 ...