BZOJ 1924 Sdoi2010 所駝門的寶藏

2022-08-16 16:51:12 字數 2124 閱讀 7306

time limit: 5 sec  memory limit: 128 mb

submit: 1380  solved: 603

[submit][status][discuss]

第一行給出三個正整數 n, r, c。 以下 n 行,每行給出一扇傳送門的資訊,包含三個正整數xi, yi, ti,表示該傳送門設在位於第 xi行第yi列的藏寶宮室,型別為 ti。ti是乙個1~3間的整數, 1表示可以傳送到第 xi行任意一列的「橫天門」,2表示可以傳送到任意一行第 yi列的「縱寰門」,3表示可以傳送到周圍 8格宮室的「**門」。 保證 1≤xi≤r,1≤yi≤c,所有的傳送門位置互不相同。

只有乙個正整數,表示你確定的路線所經過不同藏寶宮室的最大數目。

10 7 7

2 2 1

2 4 2

1 7 2

2 7 3

4 2 2

4 4 1

6 7 3

7 7 1

7 5 2

5 2 1

9測試點編號 n r c 1 16 20 20 2 300 1,000 1,000 3 500 100,000 100,000 4 2,500 5,000 5,000 5 50,000 5,000 5,000 6 50,000 1,000,000 1,000,000 7 80,000 1,000,000 1,000,000 8 100,000 1,000,000 1,000,000 9 100,000 1,000,000 1,000,000 10 100,000 1,000,000 1,000,000

圖的長和寬很大,所以我們不可能把所有點都連邊

我們發現沒有傳送門的點是沒有意義的

所以這需要在有傳送門的點之間連邊即可

一二操作好處理,三號操作的話,因為長和寬很大陣列肯定開不下

我們用map去記錄周圍八個點是否有穿送門即可

細節看**,記得vector的記憶體是根據實際用多少來算的

#include #define ll long long

#define eps 1e-7

using namespace std;

inline int read()

while(isdigit(ch))

return x*f;

}const int maxn=1e5+10;

int dx[8]=;

int dy[8]=;

vector < int > a[1000010],b[1000010];

map < int,int > mp[1000010];

struct nodee[1000010],e[1000010];

int dfs_clock=0,linkk[maxn],dfn[maxn],low[maxn],ans,k,n,m,f[maxn],x[maxn],y[maxn],opt[maxn],len,linkk[maxn],stark[maxn],top,tot,ine[maxn],sum[maxn];

bool vis[maxn];

inline void insert(int xx,int yy)

inline void insertt(int xx,int yy)

inline void tarjin(int st)

else if(vis[e[i].y]) low[st]=min(low[st],dfn[e[i].y]);

}if(low[st]==dfn[st])while(k!=st);

}}void init()

}void build()

}for(int j=0;j

}for(int i=1;i<=m;i++)

}for(int j=0;j

}for(int i=1;i<=k;i++)}}

}void rebuild()}}

}inline void dp(int st)

f[st]+=sum[st];

ans=max(ans,f[st]);

}void solve()

rebuild();

memset(vis,0,sizeof(vis));

for(int i=1;i<=tot;i++)

cout<

}int main()

bzoj 1924 所駝門王的寶藏

題目大意 有乙個r c的矩陣,上面有n個點有寶藏 每個有寶藏的點上都有傳送門 傳送門有三種 第一種可以傳到該行任意乙個有寶藏的點,第二種可以傳到該列任意乙個有寶藏的點,第三種可以傳到周圍的八連塊上有寶藏的點 現在你可以在任意乙個有寶藏的點開始,求你最多可以經過多少個不同的藏寶點 每個藏寶點可以多次進...

BZOJ1924 所駝門王的寶藏 KEY

題目傳送門 這道題苟了我好久,因為鍊錶的記憶體問題,之後再細講。首先這是一道tarjan dag上dp的題目。有三種門,對於每種門可以和其他門相連。即連邊。使用鍊錶快速查詢連邊。建完圖後可以進行tarjan縮點。然後做一遍dag上dp就好了。記搜 然後因為建圖時會有很多條邊,而行列最多只有10000...

Bzoj 2726 SDOI 任務安排

memory limit 131072kb 64bit io format lld llu description 機器上有n個需要處理的任務,它們構成了乙個序列。這些任務被標號為1到n,因此序列的排列為1,2,3.n。這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工...