2019ICPC南昌邀請賽A (斯坦納樹)

2021-09-27 06:55:37 字數 1805 閱讀 4469

大致題意

給定n個點,m條邊,給定4對點,要求將這4對點對應聯通,重複用邊只要算一次。

思路還是先跑乙個斯坦納樹森林,然後合理狀態有所不同,需要一一對應,也就是對應位置必須同時出現。但是有個坑點,4對點中可能有的點會重複出現,所以對於狀態點用vector存一下相應的圖上點。具體避免方式看**。

這種模板題,大概就是先求出斯坦納森林,然後用對應狀態去更新dp。

**

#include

using namespace std;

#define maxn 35

#define maxm 1006

#define ll long long int

#define inf 0x3f3f3f3f

#define inc(i,l,r) for(int i=l;i<=r;i++)

#define dec(i,r,l) for(int i=r;i>=l;i--)

#define mem(a) memset(a,0,sizeof(a))

#define sqr(x) (x*x)

#define inf (ll)2e18+1

#define pi acos(-1)

#define ls x<<1

#define rs x<<1|1

ll read()

while

(isdigit

(ch)

)x=x*

10+ch-

'0',ch=

getchar()

;return f*x;

}int n,m,cnt;

string s1,s2;

unordered_mapint> mp;

struct edgeed[maxm<<1]

;int head[maxn]

,tot;

void

add(

int x,

int y,

int z)

;head[x]

=tot;

}int dp[

1<<10]

,f[maxn][1

<<10]

;vector<

int>id[maxn]

;bool inq[maxn]

;queue<

int>q;

void

spfa

(int sta)}}

}}bool check

(int sta)

return true;

}int

main()

int x,y,z;

inc(i,

1,m)

inc(i,1,

4)inc(i,

1,n)

inc(j,

0,s)f[i]

[j]=inf;

inc(i,

1,n)

for(

int j=

0;j.size()

;j++

)f[i][(

1<<

(id[i]

[j]-1)

)]=0

;inc

(sta,

0,s)

if(f[i]

[sta]

}spfa

(sta);}

inc(i,

0,s)

inc(sta,

0,s)

}printf

("%d\n"

,dp[s]);

return0;

}

2019ICPC南昌邀請賽A題

當時隊友都在做其他的題,我就去看了一下。先交幾發最小生成樹wa下,然後就走了 打完比賽dalao們說是斯坦納樹板板。行吧 打完比賽太多了,直到現在才有時間,計蒜客也出復現賽了,就去學了一下 先說一下a題題意 先給n個點,點的名字還是英文的,還要記錄一下,然後給出m條邊。之後給出4行,每行兩個點的名字...

計蒜客 2019 ICPC 南昌邀請賽

目錄 f.sequence 線段樹 單點更新 區間查詢 g.winner 思維 j.prefix 字典樹 k.a good game 樹狀陣列 貪心 題意 定義給定 操作1 格式為0 x y,把ax改為y 操作2 格式為1 x y,求f x,y 分析 不難發現,f l,r 可由以下項異或得到 1 r...

2023年南昌ICPC邀請賽網路賽

a 直接跑一下 printf 6 n28 n496 n8128 n33550336 n k 跑一下會出來類似下面的規律 然後四個作為乙個迴圈節,推一下 j 樹剖加主席樹模板 i 單調棧跑一下兩邊最小值的問題,然後st表預處理字首和,接著列舉最小值,找到最遠做貢獻的區間後,分類討論 如果是正數,那就後...