jzoj1405 電纜建設

2021-07-30 16:54:57 字數 1467 閱讀 6284

特殊的平面圖求mst。當然是要尋找性質。

第一點,樹邊不可能相交。相交後,必然存在更優方案使得原生成樹成立。

第二點,若存在圖2情況,則ac不可能是樹邊。證明如下:

反證法,假設ac是樹邊。

由鈍角三角形可得,ab< ac,bc< ac,

由於ac是樹邊,所以不存在邊交叉與ac。

1. 若ab< bc,

因為ac是樹邊,所以做到ac時a、c不連通。所以ab、bc不會同時選。因為無法交叉,邊權又從小到大做,所以ab要麼直接連通,要麼中間點為ab上的點。也就等價於選ab這條邊。那麼既然選ab,ac,那麼為什麼不選完全等價的ab,bc使得答案更優秀呢?

2. 若ab>bc,基本同理。

#include 

#include

#include

#include

#define maxn 600100

#define sqr(x) ((x)*(x))

#define dis(a,b) (sqrt(sqr(x1-x2)+sqr(yy1[a]-y2[b])))

typedef

double db;

typedef

int ll;

using

namespace

std;

ll tot;

ll n,m,x1,x2;

long

long yy1[maxn],y2[maxn],fa[maxn*2];

struct edge

edge(ll _a,ll _b,db _w)

} es[maxn*4];

ll read(ll &n)

ll gf(ll x)

bool cmp(edge a,edge b)

for (ll i=1; i<=m; i++)

for (ll i=1; i1,yy1[i+1]-yy1[i]);

for (ll i=1; i1,y2[i+1]-y2[i]);

ll j=0;

for (ll i=1; i<=n; i++)

if (j!=0) es[++tot]=edge(i,j+n,dis(i,j));

}j=m+1;

for (ll i=n; i; i--)

if (j!=m+1) es[++tot]=edge(i,j+n,dis(i,j));

}sort(es+1,es+1+tot,cmp);

ll cnt=0;

db ans=0;

int f1,f2;

for (ll i=1; i<=tot; i++)

}printf("%.2lf",ans);

}

140 單詞拆分 II

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...

140 單詞拆分 II(continue)

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and dog ...

140 單詞拆分 II leecode

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。題目鏈結 這道題明顯是個搜尋的題目。但問題在於如何進行搜尋。每個位置可能...