牛客(鄰接表)

2021-08-22 19:39:23 字數 1260 閱讀 3914

本來是想要模擬節點的收縮過程,但是實在是太難做了。後來看了別人的**才想到,其實跟節點的分布沒有關係,只跟與一節點相連的點數有關係(設為x),一秒最多有x個人到達1。可以用並查集,但是我頭鐵就是要dfs,vector超時了,用鄰接表結構體少開了一倍又re了。

#include#include#include#include#include#include#include#include#define mem(a,x) memset(a,x,sizeof(a))

#define s1(x) scanf("%d",&x)

#define s2(x,y) scanf("%d%d",&x,&y)

#define s3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define s4(x,y,z,k) scanf("%d%d%d%d",&x,&y,&z,&k)

#define ff(a,n) for(int i = 0 ; i < n; i++) scanf("%d",a+i)

#define tp(x) printf("x = %d\n",x)

#define ansp(x) printf("%d\n",x)

//inline ll ask(int x)

//inline void add(int x,int d)

#define ls 2*rt

#define rs 2*rt+1

#define lson ls,l,mid

#define rson rs,mid+1,r

#define ll long long

using namespace std;

typedef pairpii;

const ll inf = 0x3f3f3f3f;

const int mx = 1e6+10;

//vectorve[mx];

bool vis[mx];

int te,ans,n,head[mx],tol;

structp[mx*2];

inline void ad(int a, int b)

void dfs(int x)

}int main()

ans = 0;

vis[1] = 1;

//int v;

for(int i = head[1]; i != -1 ; i = p[i].ne)

printf("%d\n",ans);

return 0;

}

牛客 鍊錶分割

編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。new關鍵字之後會建立例項物件,其他的複製都只是引用,比如 new a 建立a的物件 b a...

牛客 鍊錶分割

題目描述 現有一鍊錶的頭指標 listnode phead,給一定值x,編寫一段 將所有小於x的結點排在其餘結點之前,且不能改變原來的資料順序,返回重新排列後的鍊錶的頭指標。public static listnode partition listnode phead,int x else cur ...

牛客小白月賽25 I 十字爆破 鄰接表

題目描述 牛牛在玩乙個遊戲 一共有n行m列共nm個方格,每個方格中有乙個整數。牛牛選擇乙個方格,可以得到和這個方格同行 同列的所有數之和的得分。例如 對於乙個22的方格 1 23 4 牛牛選擇每個方格的得分如下 6 78 9 因為1 2 3 6,1 2 4 7,1 3 4 8,2 3 4 9。現在牛...