這題目意思能忍?讀了半年,亂七八糟的
記憶化搜索 拖拖的,dp[i][0]代表以獲得最小值為目標的船以i為起點,dp[i][1]代表以獲得最大值為目標的船以i為起點,接下來暴力枚舉入度為0的點為起點,開始記憶化搜索,
const int N = 100000 + 55; int dp[N][2]; int value[N]; int degree[N]; vectorG[N]; int n,m,f; void init() { memset(dp,-1,sizeof(dp)); memset(value,0,sizeof(value)); memset(degree,0,sizeof(degree)); for(int i=0;i >n>>m>>f) { for(int i=1;i<=n;i++)scanf("%d",&value[i]); int q = m; while(q--) { int u,v; scanf("%d %d",&u,&v); G[u].push_back(v); degree[v]++; } return false; } return true; } int dfs(int pos,int mark) { if(dp[pos][mark&1] != -1)return dp[pos][mark&1]; if(G[pos].size() == 0)return dp[pos][mark&1] = value[pos]; dp[pos][mark&1] = 0; int maxn = -1,minn = inf; for(int i=0;i