临近比赛 写题也写不了多少了 不如来口胡一下题
嘴上过了就试过了
P4042 [AHOI2014/JSOI2014]骑士游戏
一开始就想到全部扔进队列之后SPFA玄学松弛,觉得会T想了半天别的做法,一看题解竟然就是SPFA,觉得可以练手结果写了写发现暴力又好写,如果不开O²甚至需要加register才能过
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <bitset>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
#define For(i, x, y) for(int i=x;i<=y;i++)
#define _For(i, x, y) for(int i=x;i>=y;i--)
#define Mem(f, x) memset(f,x,sizeof(f))
#define Sca(x) scanf("%d", &x)
#define Sca2(x,y) scanf("%d%d",&x,&y)
#define Sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define Scl(x) scanf("%lld",&x)
#define Pri(x) printf("%d\n", x)
#define Prl(x) printf("%lld\n",x)
#define CLR(u) for(int i=0;i<=N;i++)u[i].clear();
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define PII pair<int,int>
#define PIL pair<int,long long>
#define PLL pair<long long,long long>
#define pb push_back
#define fi first
#define se second
typedef vector<int> VI;
LL read(){LL x = 0,f = 1;char c = getchar();while (c<'0' || c>'9'){if (c == '-') f = -1;c = getchar();}
while (c >= '0'&&c <= '9'){x = x * 10 + c - '0';c = getchar();}return x*f;}
const double PI = acos(-1.0);
const double eps = 1e-9;
const int maxn = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int N,M,K;
vector<int>P[maxn],Q[maxn];
LL a[maxn],b[maxn];
LL dp[maxn];
bool vis[maxn];
inline void SPFA(){
queue<int>Qu;
for(int i = 1; i <= N ; i ++){
vis[i] = 1;
Qu.push(i);
}
while(!Qu.empty()){
int u = Qu.front(); Qu.pop();
vis[u] = 0;
LL sum = a[u];
for(register int i = 0; i < P[u].size(); i ++){
int v = P[u][i];
sum += dp[v];
}
if(sum >= dp[u]) continue;
dp[u] = sum;
for(register int i = 0 ; i < Q[u].size(); i ++){
int v = Q[u][i];
if(!vis[v]){
Qu.push(v);
vis[v] = 1;
}
}
}
}
int main(){
Sca(N);
for(int i = 1; i <= N ; i ++){
a[i] = read(); dp[i] = read();
int K = read();
while(K--){
int x = read();
P[i].pb(x); Q[x].pb(i);
}
}
SPFA();
Prl(dp[1]);
return 0;
}
知识兔View CodeP2189 小Z的传感器
初看以为是一道很有操作的题,仔细一看q的范围只有5
那么每次询问先将所有没有传感器的房间用并查集连起来,然后依次每个点询问能否有一条边和初始点的并查集相连即可。
P2416 泡芙
没有口胡出来 看了题解
将整个图用tarjan边双缩点然后求树链和是否 >= 1即可