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開始,這些任務被分批加工...