|
这题先还以为是并查集
有一个点TLE
- #include<iostream>
- using namespace std;
- int n,m,v[500],x,y,c[500],ans,sum;
- bool b[500][500],bb;
- bool ch(int p,int l)
- {
- for(int i=1;i<=l;i++)if(!b[c[i]][p])return 0;
- return 1;
- }
- void dfs(int x,int i)
- {
- if(x>n)return;
- ans=max(ans,sum);
- dfs(x+1,i);
- for(int j=x+1;j<=n;j++)
- {
- if(ch(j,i))
- {
- c[++i]=j;
- sum+=v[j];
- dfs(j,i);
- sum-=v[j];
- }
- }
- }
- int main()
- {
- cin>>n>>m;
- for(int i=1;i<=n;i++)cin>>v[i];
- for(int i=1;i<=m;i++)
- {
- cin>>x>>y;
- b[x][y]=1;
- }
- dfs(0,0);
- cout<<ans;
- return 0;
- }
复制代码 |
|