【網路流24題】孤島營救問題
(網路流24題大多需要spj,所以需要一個有spj的oj,本系列程式碼均在www.oj.swust.edu.cn測試通過)
又是一道混進來的奇奇怪怪的東西,想起來以前做過這道題,用的是bfs,所以就不想寫了,附上之前的程式碼。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<string>
#include<algorithm>
#include<ctime>
#include<cmath>
using namespace std;
int men[16][16][4];
int xx[4]={1,-1,0,0};
int yy[4]={0,0,-1,1};
int er[11]={1,2,4,8,16,32,64,128,256,512,1024};
bool pd[1024][16][16];
int ys[16][16][11];
int topp[16][16];
int t[1000000];
struct my_dui
{
int x,y,zt;
}dui[1000000];
int main()
{
memset(men,-1,sizeof(men));
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
int k;
scanf("%d",&k);
int xx1,xx2,yy1,yy2;
int zl;
for(int i=1;i<=k;i++)
{
scanf("%d%d%d%d%d",&xx1,&yy1,&xx2,&yy2,&zl);
if(abs(xx1-xx2)==1)
{
int mid,midd;
mid=min(xx1,xx2);
midd=max(xx1,xx2);
men[mid][yy1][0 ]=zl;
men[midd][yy1][1]=zl;
}
else if(abs(yy1-yy2)==1)
{
int mid,midd;
mid=min(yy1,yy2);
midd=max(yy1,yy2);
men[xx1][mid][3]=zl;
men[xx1][midd][2]=zl;
}
}
int s;
scanf("%d",&s);
for(int i=1;i<=s;i++)
{
int xxx,yyy;
scanf("%d%d",&xxx,&yyy);
scanf("%d",&ys[xxx][yyy][++topp[xxx][yyy]]);
}
int top=1;
int my_final=2;
dui[1].x=1;
dui[1].y=1;
dui[1].zt=0;
if(topp[1][1]!=0)
{
for(int i=1;i<=topp[1][1];i++)
{
if(!((dui[1].zt)&(ys[1][1][i]))) dui[1].zt+=er[ys[1][1][i]-1];
dui[1].zt+=er[ys[1][1][i]-1];
}
}
pd[dui[1].zt][1][1]=true;
while(top<my_final)
{
int x=dui[top].x;
int y=dui[top].y;
if(x==n && y==m)
{
cout<<t[top];
return 0;
}
int zt=dui[top].zt;
//cout<<x<<" "<<y<<" "<<zt<<endl;
for(int i=0;i<=3;i++)
{
if(men[x][y][i]==0) continue;
if(x+xx[i]>n || x+xx[i]<1 || y+yy[i]>m || y+yy[i]<1) continue;
if(men[x][y][i]!=-1)
if(!(zt&(er[men[x][y][i]-1]))) continue;
int zt1=zt;
for(int j=1;j<=topp[x+xx[i]][y+yy[i]];j++)
{
if(ys[x+xx[i]][y+yy[i]][j]!=0 && !(zt1&(er[ys[x+xx[i]][y+yy[i]][j]-1]))) zt1+=er[ys[x+xx[i]][y+yy[i]][j]-1];
}
if(pd[zt1][x+xx[i]][y+yy[i]]) continue;
pd[zt1][x+xx[i]][y+yy[i]]=true;
dui[my_final].x=x+xx[i];
dui[my_final].y=y+yy[i];
dui[my_final].zt=zt1;
t[my_final++]=t[top]+1;
}
top++;
}
cout<<-1;
return 0;
}
相關推薦
【網路流24題】孤島營救問題
(網路流24題大多需要spj,所以需要一個有spj的oj,本系列程式碼均在www.oj.swust.edu.cn測試通過) 又是一道混進來的奇奇怪怪的東西,想起來以前做過這道題,用的是bfs,所以就不想寫了,附上之前的程式碼。 #include<cs
【網路流24題】飛行員配對方案問題
題目描述 英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最多的飛機。對於給定
【網路流24題】最小路徑覆蓋問題-二分圖匹配/最大流
傳送門:luogu P2764 最小路徑覆蓋問題 題解 結論: D A G
【網路流24題】餐巾計劃(最小費用最大流)
題意 一個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir_iri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 PPP 分;或者把舊餐巾送到快洗部,洗一塊需 MMM天,其費用為 FFF 分;或者送到慢洗部,洗一塊需
【網路流24題】運輸問題(最小費用最大流)
題意 W 公司有 mmm 個倉庫和 nnn 個零售商店。第 iii 個倉庫有 aia_iai 個單位的貨物;第 jjj 個零售商店需要 bjb_jbj 個單位的貨物。貨物供需平衡,即∑i=1mai=∑j=1nbj\sum\limits_{i =
「網路流 24 題」孤島營救問題 最短路
題目連結:https://loj.ac/problem/6121 題意: 給你一個n*m的圖,你要從(1,1)出發到達(n,m),路上會有最多p種牆和鑰匙。接下來會給你k個門,在x1,y1,x2,y2之間會有一扇k
【網路流24題】魔術球問題
題目: 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為1,2,3,…的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。 試設計一個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根柱子
2018.10.22【網路流24題】【洛谷P2770】【LOJ6122】航空路線問題(費用流)
洛谷傳送門 解析: 調了半天最後發現費用流部分一個小細節跪了。。。 心態爆炸。。。問題不大 思路: 首先我們直接找出兩條沒有重複節點的路徑,一條正著輸出一條倒著輸出就行了。 找的話考慮網路流。我們將每個點拆點成兩個ai,bia_i,b_iai,bi,為保
【網路流24題】 No.10 餐巾計劃問題 (線性規劃網路優化 最小費用最大流)
【題意】 一個餐廳在相繼的 N 天裡, 每天需用的餐巾數不盡相同。 假設第 i 天需要 ri 塊餐巾(i=1,2,…, N)。 餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f分;或者送到慢洗部, 洗一塊需 n 天(n>m),其費用為 s<
【網路流24題】火星探險問題(費用流)
題面 題解 如果不考慮標本的採集 那麼,很容易的 直接相鄰點連邊就行了 現在,因為要考慮標本數最多 所以每個點要額外考慮一個標本 但是標本又只能採集一次 所以,拆點,標本就額外的連一條容量1費用1的邊, 表示可以採集一次, 因為採集過之後
【網路流24題】試題庫(二分圖+最大流)
傳送門 試題庫 I think 點集x,y分別放置試題與型別。源點向x集點連容量為1的邊,x集點向y中其所屬型別連容量為1的邊,y集點向T連容量為所需量的邊,求解最大流若等於總題數
【LibreOJ6003】【網路流24題】魔術球問題 的通項公式與線性解法
假設有 n 根柱子,現要按下述規則在這n 根柱子中依次放入編號為1,2,3,4,⋯的球。每次只能在某根柱子的最上面放球。在同一根柱子中,任何 2 個相鄰球的編號之和為完全平方數。試設計一個演算法,計算出在 n 根柱子上最多能放多少個球。這道題有貪心做法,由於答案的數量是O(n
【網路流24題】火星探險問題
由於這道題的輸出太過龐大而且之前提供的oj也沒有spj,無法驗證程式碼正確性,所以這道題僅提供思路,就不附程式碼了,這道題其實和之前幾道網格題是挺像的,只不過這道題有的地方有石頭,有的地方沒有石頭,有的地方還不能走,那麼我們就像之前的那樣建圖,把一個點拆分成兩個
【網路流 24 題】方格取數(二分圖的最大點權獨立集)
題意 在一個有 m×nm \times nm×n個方格的棋盤中,每個方格中有一個正整數。 現要從方格中取數,使任意 222 個數所在方格沒有公共邊,且取出的數的總和最大。試設計一個滿足要求的取數演算法。 題解 題目要求不相鄰,可以轉換為最大獨立集,又由於點權不全
【網路流24題之一】飛行員配對問題+求方案(網路流dinic演算法求二分圖最大匹配)
題面 題目背景 第二次世界大戰時期.. 題目描述 英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可
「LOJ#6121」「網絡流 24 題」孤島營救問題(BFS
東西方 bsp class 題解 表示 time 幸好 不同 北方 題目描述 1944 年,特種兵麥克接到國防部的命令,要求立即趕赴太平洋上的一個孤島,營救被敵軍俘虜的大兵瑞恩。瑞恩被關押在一個迷宮裏,迷宮地形復雜,但幸好麥克得到了迷宮的地形圖。迷宮的外形
【文文殿下】網路流24題計劃
飛行員配對方案問題 題目背景 第二次世界大戰時期.. 題目描述 英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合
【洛谷2756】飛行員配對方案問題(二分圖匹配,網路流24題)
前言 網路流24題還是要做完吧! 題解 這是一道模板題,這裡主要講一下怎麼匈牙利二分圖匹配: 對於左邊的列舉每一次選的左邊的人 對於右邊與他有連邊的那麼就是能換則換,不然就不換 最後統計出來的就是\(ans\) 差不多就是這樣子了吧。 #include<stdio.h>
【洛谷4016】 負載平衡問題(網路流24題,最小費用最大流)
前言 網路流24題還是要寫一下。 Solution 我們先來研究一下這個題目是個什麼東西: 每一個點有可能比平均數多,也有可能少,然後你就發現相當於是我們建了兩個超級源點和超級匯點,然後從這兩個點去分和流入。 然後對於這個環就可以直接建環(注意建邊的時候的一些細節操作) 跑一邊費用流就好了。 #inc
nefu495最長k可重區間集問題【最大權不相交路徑】網路流24題
本來是應該昨天晚上就寫完的,果然在家的狀態不好==而且以後就應該11點半之前就睡,腦子不靈光寫字都不過腦子還不如睡覺~。~據說今年國賽有5站,留下來問題應該不大,但是能拿什麼獎就不好說了,總之要加油。。方法二沒看懂,最大權不相交路徑太難了,24題裡面只有兩個,還都是4星的=