特殊的平面圖求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,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。題目鏈結 這道題明顯是個搜尋的題目。但問題在於如何進行搜尋。每個位置可能...