萌新求助 记忆化搜索20分
查看原帖
萌新求助 记忆化搜索20分
310818
蒟酱厂妹楼主2022/3/4 12:53

调的人都无了只有20分

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using std::cin;using std::cout;
std::vector<int>s[100007];
int a[100007],n,m,ans=0;
bool vis[100007][107][3];
void dfs(int now,int data,int type){
	cout<<now<<' '<<data<<' '<<type<<'\n';
	if(now==n&&type==2){ans=std::max(ans,data);return;}
	if(vis[now][data][type])return;else vis[now][data][type]=true;
	if(type==0)for(auto it:s[now])dfs(it,0,0),dfs(it,a[now],1);
	else if(type==1)for(auto it:s[now]){dfs(it,data,1);if(a[now]-data>ans)dfs(it,a[now]-data,2);}
	else for(auto it:s[now])dfs(it,now,2);
}
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(nullptr);cout.tie(nullptr);
	int i,u,v,t;
	cin>>n>>m;
	for(i=1;i<=n;i++)cin>>a[i];
	for(i=1;i<=m;i++){
		cin>>u>>v>>t;
		s[u].emplace_back(v);
		if(t==2)s[v].emplace_back(u);
	}
	dfs(1,0,0);
	cout<<ans;
	return 0;
}
2022/3/4 12:53
加载中...