解法一(30分):
直接跑spfa,求最大瓶頸路。
#include#include#include#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int maxn=10005,maxm=50005,inf=100000000;
struct edgee[maxm<<1];
int head[maxn],tot;
int n,m,q;
int dis[maxn],inq[maxn],q[maxn];
inline void add(int u,int v,int w)
inline void spfa(int s,int t)
cin>>q;
f(i,1,q)
return 0;
}
解法二(60分)
最後的路徑一定在最大生成樹上,於是先跑出最大生成樹,然後在樹上跑spfa。
#include#include#include#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int maxn=10005,maxm=50005,inf=100000000;
struct node
}a[maxm];
struct edgee[maxm<<1];
int head[maxn],tot;
int n,m,q;
int dis[maxn],inq[maxn],q[maxn];
int fa[maxn];
inline void makeset()
inline int find(int x)
inline bool unionset(int x,int y)
inline void add(int u,int v,int w)
inline void spfa(int s,int t)
sort(a+1,a+1+m);
f(i,1,m)
}cin>>q;
f(i,1,q)
return 0;
}
解法三(100分):
樹上倍增。
#include#include#include#define f(i,l,r) for(i=(l);i<=(r);i++)
#define ff(i,r,l) for(i=(r);i>=(l);i--)
using namespace std;
const int maxn=10005,maxm=50005,inf=100000000;
struct node
}a[maxm];
struct edgee[maxm<<1];
int head[maxn],tot;
int n,m,q;
int dis[maxn],inq[maxn],q[maxn];
int fa[maxn];
int dep[maxn],fa[maxn][20],vis[maxn],d[maxn][20];
inline void dfs(int u)
sort(a+1,a+1+m);
f(i,1,m)
} f(i,1,n)
// f(i,1,n) cout<>q;
f(i,1,q)e[maxn<<1];
struct node
}a[maxm];
inline void makeset()
inline int find(int x)
inline bool unionset(int x,int y)
inline void add(int u,int v,int w)
inline void dfs1(int u)
}inline void dfs2(int u,int anc)
for(i=head[u];~i;i=e[i].next)
}inline void pushup(int x)
inline void build(int x,int l,int r)
if(l>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
pushup(x); }}
inline void query(int x,int l,int r,int sj,int tj)
int mid=l+r>>1;
if(mid>=sj) query(x<<1,l,mid,sj,tj);
if(mid+1<=tj) query(x<<1|1,mid+1,r,sj,tj);
}inline void work(int x,int y)
sort(a+1,a+1+m);
f(i,1,m)
} f(i,1,n)
} build(1,1,n);
cin>>q;
f(i,1,q){
cin>>u>>v;
if(find(u)!=find(v)) cout<<-1<
洛谷 P1967 貨車運輸
a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔開的整數 n,m,表示 a 國有 ...
洛谷 P1967 貨車運輸
題目描述 a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入輸出格式 輸入格式 輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔...
洛谷P1967貨車運輸
這道題 首先不難看出要先求乙個最大生成樹,因為我們在盡量圖聯通的情況下,使兩點之間有一條權值最大的邊,所以kru跑一遍最大生成樹 然後會有很顯然的事情就是裸的生成樹只能求總和,但我們需要知道樹上有哪條邊,所以在合併兩個聯通塊時,將兩個端點以及他們間的邊加入另乙個圖中,那麼顯然新圖中只包含最大生成樹上...