这题目意思能忍?读了半年,乱七八糟的
记忆化搜索 拖拖的,dp[i][0]代表以获得最小值为目标的船以i为起点,dp[i][1]代表以获得最大值为目标的船以i为起点,接下来暴力枚举入度为0的点为起点,开始记忆化搜索,
const int N = 100000 + 55;
int dp[N][2];
int value[N];
int degree[N];
vector
G[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