AHOI2014 支線劇情(有上下界的網路流)

2022-05-11 15:27:48 字數 1264 閱讀 2339

題目要求即為每條邊至少經過一次,那麼就想到有下界網路流(上界為正無窮),每條邊的流量就代表經過了幾次。建立乙個源點和匯點,從源點連向 \(1\) 一條下界為 \(0\) 的邊,從每個點連向匯點一條下界為 \(0\) 的邊,應為還要求時間最短所以是上下界最小費用流。套模板即可。

#includeusing namespace std;

const int inf=0x3f3f3f3f;

templatevoid read(t &x)

for(x=0;'0'<=ch&&ch<='9';ch=getchar())

}struct nodeedge[100005];

int head[100005],tot=1;

int s, t;

int s,t;

int n;

int dis[100005];

bool vis[100005];

int pre[100005], incf[100005];

bool spfa()

}} vis[x] = 0;

} if (dis[t] < 0x3f3f3f3f) return true;

return false;

}int max_flow, ans;

void update()

max_flow += incf[t];

ans += dis[t] * incf[t];

}void add_edge(int u,int v,int l,int w);

head[u]=tot;

edge[++tot]=node;

head[v]=tot;

}struct node2edge2[10005];

int tot2;

void add_edge2(int u,int v,int l,int r,int w) ;

}int flow[10005];

int main()

add_edge2(i,t,0,inf,0);

} add_edge2(t, s, 0, inf, 0);

s=n+2,t=n+3;

for (int i = 1; i <= tot2; i++)

for (int i = 0; i <= n+1; i++) else if (flow[i] < 0)

} while (spfa())

printf("%d\n", ans);

return 0;

}

AHOI2014 支線劇情 有上下界的網路流

jyy現在所玩的rpg遊戲中,一共有n個劇情點,由1到n編號,第i個劇情點可以根據jyy的不同的選擇,而經過不同的支線劇情,前往ki種不同的新的劇情點。當然如果為0,則說明i號劇情點是遊戲的乙個結局了。jyy 乙個支線劇情需要一定的時間。jyy一開始處在1號劇情點,也就是遊戲的開始。顯然任何乙個劇情...

AHOI2014 JSOI2014 支線劇情

傳送門 上下界網路流。以 1 號節點為源點 s 新建乙個匯點 t 如果 u 能到 v 那麼連邊 u to v 下界為 1 上界為 infty 費用為對應的所需時間,表示這段劇情至少看一次,且看一次代價為對應的所需時間。又因為我們可以在任何乙個節點重開一次,所以我們的每個節點 u 都連邊 u to t...

AHOI2014 JSOI2014 支線劇情

嘟嘟嘟 這是一道上下界費用流的模板題。源點就是1,匯點沒有,所以我們把每乙個點都連向匯點,因為可以在任意乙個點退出遊戲。上下界費用流的建圖方法和上下界網路流的建圖方法一樣。都是建立附加源匯。只不過每條邊多了個費用。有費用的邊就是他自己的費用,其他的 比如補償用的邊 的費用全是0。然後我們跑費用流,答...