大致題意
給定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表預處理字首和,接著列舉最小值,找到最遠做貢獻的區間後,分類討論 如果是正數,那就後...