bzoj2007: [Noi2010]海拔
生活随笔
收集整理的這篇文章主要介紹了
bzoj2007: [Noi2010]海拔
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天各位D初一小猴子的情景
你學網(wǎng)絡流?
來來來師兄給你來幾題?
無源匯有上下界費用流會不會?
最大權閉合子圖會不會?
黑白染色會不會?
這都不會?
菜雞yzh:你能不能不用網(wǎng)絡流做狼抓兔子
。。。
然而隨便點開這題
誒NOI的題會這么水要么高度為1要么為0?
啊不就是平面圖轉(zhuǎn)對偶圖?
然后一開始以為回邊是沒用的。。。圖又建錯一次。。。。
dij才是正解,但是呢spfa可以狗過。。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std;struct node {int x,y,d,next; }a[4100000];int len,last[310000]; void ins(int x,int y,int d) {len++;a[len].x=x;a[len].y=y;a[len].d=d;a[len].next=last[x];last[x]=len; }int list[310000];bool v[310000]; int d[310000]; int main() {freopen("altitude.in","r",stdin);freopen("altitude.out","w",stdout);int n,dd,st,ed;scanf("%d",&n);st=n*n+1,ed=n*n+2;for(int i=1;i<=n+1;i++){for(int j=1;j<=n;j++){scanf("%d",&dd);if(i==1)ins(st,j,dd);else if(i==n+1)ins(n*(n-1)+j,ed,dd);elseins(n*(i-2)+j,n*(i-1)+j,dd);}}for(int i=1;i<=n;i++){for(int j=1;j<=n+1;j++){scanf("%d",&dd);if(j==1)ins(n*(i-1)+j,ed,dd);else if(j==n+1)ins(st,n*i,dd);elseins(n*(i-1)+j,n*(i-1)+j-1,dd);}}for(int i=1;i<=n+1;i++){for(int j=1;j<=n;j++){scanf("%d",&dd);if(i==1)ins(j,st,dd);else if(i==n+1)ins(ed,n*(n-1)+j,dd);elseins(n*(i-1)+j,n*(i-2)+j,dd);}}for(int i=1;i<=n;i++){for(int j=1;j<=n+1;j++){scanf("%d",&dd);if(j==1)ins(ed,n*(i-1)+j,dd);else if(j==n+1)ins(n*i,st,dd);elseins(n*(i-1)+j-1,n*(i-1)+j,dd);}}//---------composition-------------------- memset(d,63,sizeof(d));d[st]=0;memset(v,false,sizeof(v));v[st]=true;int head=1,tail=2;list[1]=st;while(head!=tail){int x=list[head];for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(d[y]>d[x]+a[k].d){d[y]=d[x]+a[k].d;if(v[y]==false){v[y]=true;list[tail]=y;tail++;if(tail==301000)tail=1;}}}v[x]=false;head++;if(head==301000)head=1;}printf("%d\n",d[ed]);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/AKCqhzdy/p/8869845.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的bzoj2007: [Noi2010]海拔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [洛谷P1438] 无聊的数列
- 下一篇: 面向对象-多态与多态性