JZOJ 3414. 【NOIP2013模拟】开心小屋
题目
分析
- dfs可以过 666
- 一个超级厉害的剪枝 心情一到负数就return
- 因为同一个环,总有第二个点可以满足全为正数
代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,start,ans=1e9; 4 int a[305][305]; 5 bool vis[305]; 6 void dfs(int x,int lev,int sum) 7 { 8 if(lev>ans||sum<0) return; 9 if(x==start&&lev>0) 10 { 11 if(sum>0) 12 ans=min(ans,lev); 13 return; 14 } 15 for(int i=1;i<=n;i++) 16 if(a[x][i]<=10000&&!vis[i]) 17 { 18 vis[i]=1; 19 dfs(i,lev+1,sum+a[x][i]); 20 vis[i]=0; 21 } 22 return; 23 } 24 int main() 25 { 26 scanf("%d%d",&n,&m); 27 memset(a,0x3f,sizeof(a)); 28 for(int i=1,u,v,x,y;i<=m;i++) 29 { 30 scanf("%d%d%d%d",&u,&v,&x,&y); 31 a[u][v]=x;a[v][u]=y; 32 } 33 for(int i=1;i<=n;i++) 34 start=i,dfs(i,0,0); 35 cout<<ans; 36 }
为何要逼自己长大,去闯不该闯的荒唐