挖地雷用的dfs,t掉了,求调
  • 板块灌水区
  • 楼主hh弟中弟
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/8/21 10:42
  • 上次更新2023/10/27 14:20:51
查看原帖
挖地雷用的dfs,t掉了,求调
366639
hh弟中弟楼主2022/8/21 10:42

挖地雷,题面跟洛谷的不太一样,用的爆搜,t掉了 求调

#include<bits/stdc++.h>
using namespace std;
struct dijiao{
	int a,s,l[205];
}hole[205];
int sum=0,maxx=0,zh,pos[10086];
void search(int n){
	int s=hole[n].s;sum+=hole[n].a;pos[n]=max(sum,pos[n]);
	//cout<<sum<<' ';
	if(sum>maxx){
			zh=n;//cout<<sum<<' ';
			
			maxx=sum;
		}
	if(n==6&&!s)return;
	for(int i=1;i<=s;i++){
		search(hole[n].l[i]);sum-=hole[hole[n].l[i]].a;
	}
}
int main(){
	int n,x,y;cin>>n;
	for(int i=1;i<=n;i++)cin>>hole[i].a;
	cin>>x>>y;
	while(x&&y){
		hole[x].s++;hole[x].l[hole[x].s]=y;
		cin>>x>>y;
	}
	for(int i=1;i<=n;i++){sum=0;search(i);}
	stack<int>s;int ans=maxx,c=hole[zh].a;
//	cout<<endl;
	while(maxx){
		for(int i=zh-1;i>=1;i--){
			maxx-=c;
			if(pos[i]==maxx){
				//maxx=pos[i];
				c=hole[i].a;
				s.push(i);
			}
			if(!maxx)break; 
		}
	}
	while(!s.empty()){
		cout<<s.top()<<'-';s.pop();
	}cout<<zh<<endl;
	cout<<ans;
//	cout<<zh<<endl;
	//for(int i=1;i<=n;i++)cout<<pos[i]<<' ';
}

2022/8/21 10:42
加载中...