题意:给你一张有n个点m条边组组成的无向图,每条边的容量未知,但是给你每条边通过1流量所需要的花费,现在给你q个询问,每次询问的给你u,v表示将每条边的容量改为u/v,问你从1-n流过流量为1的最小花费是多少。
思路:很快就能想到这是个最小费最大流问题,但是询问为1e5每次重新跑费用流一定是会超时的,但是我们知道每次询问我们需要的最大的流量和当前流量下的最小花费即可,因此我们可以跑一次就把所有的需要的流量和最小花费全部存在来,然后处理一下前缀就可以了,在询问中乱搞一下就可以把答案搞出来了。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#include<set>
#include<vector>
#include <queue>
#define mes(a, b) memset(a, b, sizeof a)
#define pb push_back
typedef unsigned long long int ull;
typedef long long int ll;
const int maxn = 1e6 + 1;
const int maxm = 1e5 + 10;
const ll mod = 1e9 + 7;
const ll INF = 1e18 + 100;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-8;
using namespace std;
struct edge{
int nex,v,cost,flow;
}e[maxm];
int head[maxn],cnt=1;
std::vector<int>v;
int n,m;
inline void