就是在我加注释的那一行
在刚创立vector的时候他不就是空的吗,为什么还需要clear()一下
我试了把这行代码删除,然后提交(原本是AC了)就TLE了
这是HD的1520,求教各位大神!
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int is,no;
int v;
vector<int> son;
}a[6007];
int f[6007];
int n;
int max(int a,int b)
{
return a>b?a:b;
}
void dfs(int x)
{
for(int i = 0;i < a[x].son.size();i++) {
int t = a[x].son[i];
dfs(t);
a[x].is += a[t].no;
a[x].no += max(a[t].no,a[t].is);
}
}
int main()
{
while(~scanf("%d",&n))
{
memset(f,0,sizeof(f));
for(int i = 1;i <= n;i++){
scanf("%d",&a[i].v);
a[i].son.clear();//这一行
a[i].is = a[i].v;
a[i].no = 0;
}
int son,fa;
while(scanf("%d%d",&son,&fa) && son+fa) {
a[fa].son.push_back(son);
f[son] = 1;
}
for(int i = 1;i <= n;i++)
if(!f[i]) {
dfs(i);
printf("%d\n",max(a[i].is,a[i].no));
break;
}
}
return 0;
}