A:基础树Dp
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
//反向建图,找入度为0的点。
int dp[10000][2];
int degree[10000];
int val[10000];
vector<int >mp[10000];
int vis[10000];
void DP(int now)
{
dp[now][0]=val[now];
dp[now][1]=0;
vis[now]=1;
for(int i=0; i<mp[now].size(); i++)
{
int to=mp[now][i];
if(vis[to]==1)continue;
DP(to);
dp[now][0]+=dp[to][1];
dp[now][1]+=max(dp[to][1],dp[to][0]);
}
}
int main()
{
int n,root;
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)vis[i]=0;
for(int i=1; i<=n; i++)degree[i]=0;
for(int i=1; i<=n; i++)mp[i].clear();
for(int i=1; i<=n; i++)scanf("%d",&val[i]);
while(1)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==0&&y==0)
{
break;
}
mp[y].push_back(x);
degree[x]++;
}
for(int i=1; i<=n; i++)
{
if(degree[i]==0)
{
root=i;
break;
}
}
DP(root);
printf("%d\n",max(dp[root][0],dp[root][1]));
}
}
B:http://blog.youkuaiyun.com/mengxiang000000/article/details/70209680
C:http://blog.youkuaiyun.com/mengxiang000000/article/details/50614873
D:http://blog.youkuaiyun.com/mengxiang000000/article/details/70198346
E:http://blog.youkuaiyun.com/mengxiang000000/article/details/51171043
F:基础Bfs
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int vis[100005];
int output[100005];
int bfs(int a,int b)
{
queue<int >s;
s.push(a);
memset(vis,0,sizeof(vis));
memset(output,0,sizeof(output));
vis[a]=1;
int num;
int yidong;
while(!s.empty())
{
num=s.front();
s.pop();
if(num==b)
break;
for(int i=0;i<3;i++)
{
if(i==0)
{
yidong=num+1;
}
if(i==1)
{
yidong=num-1;
}
if(i==2)
{
yidong=num*2;
}
if(vis[yidong]==0&&yidong>=0&&yidong<=100005)
{
output[yidong]=output[num]+1;
vis[yidong]=1;
s.push(yidong);
}
}
}
return output[b];
}
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",bfs(a,b));
}
}
G:窝不会计算几何啊.........................
H:http://blog.youkuaiyun.com/mengxiang000000/article/details/70208498
I:http://blog.youkuaiyun.com/mengxiang000000/article/details/70208846
J:基础贪心
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct d
{
int a,b;
double c;
}l[10000];
double cmp(d x,d y)
{
return x.c>y.c;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==-1&&m==-1)break;
int f=n;
double s;
for(int i=0;i<m;i++)
{
scanf("%d%d",&l[i].a,&l[i].b);//输入价格重量.
l[i].c=double(l[i].a)/double(l[i].b);
}
sort(l,l+m,cmp);
for(int i=0;i<m;i++)
{
if(f>=l[i].b)
{
s+=l[i].a;
f-=l[i].b;
}
else
{
s+=f*l[i].c;
break;
}
}
printf("%.3lf\n",s);
s=0;
}
}