題目要求即為每條邊至少經過一次,那麼就想到有下界網路流(上界為正無窮),每條邊的流量就代表經過了幾次。建立乙個源點和匯點,從源點連向 \(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。然後我們跑費用流,答...