Hủy đi điểm là một loại đồ luận kiến mô tư tưởng, thường dùng vớiInternet lưu,Dùng để xử lýĐiểm quyền hoặc là điểm lưu lượng hạn chếVấn đề, cũng thường dùng vớiPhân tầng đồ.
Giao điểm có lưu lượng hạn chế lớn nhất lưu
Nếu đem giao điểm chuyển hóa thành biên, như vậy vấn đề này liền có thể bộ bản tử giải quyết.
Chúng ta suy xét đem có lưu lượng hạn chế giao điểm chuyển hóa thành như vậy một loại hình thức: Từ hai cái giao điểmCùng một cái biênTạo thành bộ phận. Trong đó, giao điểmHứng lấy sở hữu từ nguyên trên bản vẽ mặt khác điểm xuất phát đến nguyên trên bản vẽ nên điểm biên, giao điểmDẫn ra sở hữu từ nguyên trên bản vẽ nên điểm xuất phát tới nguyên trên bản vẽ mặt khác điểm biên. BiênLưu lượng hạn chế vì nguyên đồ nên điểm lưu lượng hạn chế, lại bộ bản tử liền có thể giải quyết chủ đề. Đây là hủy đi điểm cơ bản tư tưởng.
Nếu nguyên đồ là như thế này:
Hủy đi điểm lúc sau đồ là cái dạng này:
Phân tầng đồ ngắn nhất lộ
Phân tầng đồ ngắn nhất lộ, như: CóThứ linh đại giới thông qua một cái đường nhỏ, cầu tổng nhỏ nhất tiêu phí. Đối với loại này đề mục, chúng ta có thể chọn dùng DP tương quan tư tưởng, thiếtTỏ vẻ trước mặt từ khởi điểmHào giao điểm, sử dụngThứ miễn phí thông hành quyền hạn sau ngắn nhất đường nhỏ. Hiển nhiên,Số tổ có thể như vậy dời đi:
Trong đó,Tỏ vẻPhụ thân tiết điểm,Tỏ vẻ trước mặt sở đi biên biên quyền. ĐươngKhi,=.
Trên thực tế, cái này DP liền tương đương với đem mỗi cái giao điểm tách ra thànhCái giao điểm, mỗi cái tân giao điểm đại biểu sử dụng bất đồng nhiều lần miễn phí thông hành sau tới nguyên đồ giao điểm. Nói cách khác, chính là mỗi cái giao điểmTỏ vẻ sử dụngThứ miễn phí thông hành quyền hạn sau tớiGiao điểm.
structState{// ưu tiên đội ngũ giao điểm kết cấu thểintv,w,cnt;// cnt tỏ vẻ đã sử dụng bao nhiêu lần miễn phí thông hành quyền hạnState(){}State(intv,intw,intcnt):v(v),w(w),cnt(cnt){}booloperator(constState&rhs)const{returnw>rhs.w;}};voiddijkstra(){memset(dis,0x3f,sizeofdis);dis[s][0]=0;pq.push(State(s,0,0));// đến khởi điểm không cần sử dụng miễn phí thông hành quyền, khoảng cách bằng khôngwhile(!pq.empty()){constStatetop=pq.top();pq.pop();intu=top.v,nowCnt=top.cnt;if(done[u][nowCnt])continue;done[u][nowCnt]=true;for(inti=head[u];i;i=edge[i].next){intv=edge[i].v,w=edge[i].w;if(nowCntk&&dis[v][nowCnt+1]>dis[u][nowCnt]){// có thể miễn phí thông hànhdis[v][nowCnt+1]=dis[u][nowCnt];pq.push(State(v,dis[v][nowCnt+1],nowCnt+1));}if(dis[v][nowCnt]>dis[u][nowCnt]+w){// không thể miễn phí thông hànhdis[v][nowCnt]=dis[u][nowCnt]+w;pq.push(State(v,dis[v][nowCnt],nowCnt));}}}}intmain(){n=read(),m=read(),k=read();// người viết thói quen từ 1 đến n đánh số, mà đề này là từ 0 đến n - 1, cho nên muốn xử lý một chúts=read()+1,t=read()+1;while(m--){intu=read()+1,v=read()+1,w=read();add(u,v,w),add(v,u,w);// đề này là song hướng biên}dijkstra();intans=std::numeric_limitsint>::max();// ans lấy int cực đại vì sơ giá trịfor(inti=0;ik;++i)ans=std::min(ans,dis[t][i]);// đối tới chung điểm sở hữu tình huống lấy tối ưu giá trịprintln(ans);}