貝殼找房魔法師顧問 2018 計蒜之道 複賽

2022-09-17 07:33:10 字數 3968 閱讀 3865

v&v無向圖

強連通圖

每個子圖,n個點,選擇n-1條,使互相連線

因為目標點x->點y,可以改為點y->點x

v&c弱連通圖(將有向圖的所有的有向邊替換為無向邊,所得到的圖稱為原圖的基圖。如果乙個有向圖的基圖是連通圖,則有向圖是弱連通圖。)

1.乙個弱連通子圖,它裡面的點與該弱連通子圖外的點與沒有關係,可以單獨處理

2.弱連通子圖里,乙個點,必有另外點與之相鄰,包括入和出

3.若弱連通子圖里有環,則無論怎麼修改,避免不了最後的圖,有環的情況(因為需求無法改變,x指向y,則從x出發,必有路徑到y),

對於環外剩下的點,也必至少有一條邊,總邊數大於等於點數

4.對於弱連通子圖的點,可以構造乙個環,使它們相互可以到達,需要的邊的數量為點數

5.所以對於有環的弱連通子圖,選擇4的方案,構造環

6.對於沒有環的弱連通子圖,求拓撲排序,從小到大賦予編號,

按照編號,點1連線,點2連線點3,...,點p-1連線點p,滿足條件。

對於邊,必定是編號小的點連線編號大的點,所以沒有產生遺漏。

需要的邊的數量為點數-1如6

計蒜客好像不能開以下優化,差評:

ios_base::sync_with_stdio(0);

cin.tie(0);

///所以參加比賽時,先測試一下這些能不能用

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8

using

namespace

std;

9#define ll long long

10 #include 11

12const

double eps=1e-8;13

const ll inf=1e9;

14const ll mod=1e9+7;15

const

int maxn=1e5+10;16

17struct

node

18*e[maxn],*b[maxn];

2223

string c[2

];24

int s[2

][maxn],tot[maxn],q[maxn];

25bool

vis[maxn];

2627 mapint,int>,int>ma;

2829

intmain()

3048

if (k==1

)49 swap(c[0],c[1

]);50

51if (c[0][0]=='

c' && c[1][0]=='c'

)5261else

if (c[1][0]=='c'

)62)!=ma.end())

68continue

;69 ma=1

;70 p=new

node();

71 p->d=y;

72 p->to=e[x];

73 e[x]=p;

7475 p=new

node();

76 p->d=x;

77 p->to=e[y];

78 e[y]=p;

79 tot[y]++;

8081 p=new

node();

82 p->d=y;

83 p->to=b[x];

84 b[x]=p;

8586}87

88for (i=1;i<=1e5;i++)

89if (!vis[i] &&e[i])

90105 p=p->to;

106}

107}

108109 temp=tail;

110 head=0,tail=0

;111

for (j=1;j<=temp;j++)

112if (!tot[q[j]])

113 q[++tail]=q[j];

114115

///if no loop, tr**ersal tail points

116while (head

117128

}129 cnt+=temp-(tail==temp);

130}

131 cout<

132}

133else

134151

152for (i=1;i<=1e5;i++)

153if (!vis[i] &&e[i])

154169 p=p->to;

170}

171}

172 cnt+=tail-1

;173

}174 cout<

175}

176return0;

177}

178/*

1792

180constant 111 222

181constant 111 223

182183

2184

constant 111 222

185constant 111 222

186187

5188

variable 111 222 333 444 555

189variable 222 333 111 444 666

190191

5192

constant 111 222 333 444 333

193variable 222 111 444 555 666

194195

5196

variable 222 111 444 555 666

197constant 111 222 333 444 333

198199

7200

variable 222 111 444 555 666 444 444

201constant 111 222 333 444 333 666 555

202203

3204

variable 111 111 111

205variable 222 222 222

206207

4208

constant 333 111 111 111

209variable 333 222 222 222

210211

6212

constant 1 2 3 1 2 3

213variable 4 4 4 5 5 5

214215

6216

variable 1 2 3 1 2 3

217variable 4 4 4 5 5 5

218219

3220

variable 1 2 3

221variable 4 5 6

222223

3224

constant 1 2 3

225variable 4 5 6

226*/

貝殼找房魔法師顧問 並查集 DAG判斷

題目鏈結 計蒜客2018複賽d題,想簡單了。題解 題目是中文的,不再贅述。題解 分為三種情況 1 兩個字串都不能變 這種情況最簡單,直接暴力判斷兩個支付穿是否相同即可。2 兩個字串都能變 把上下對應位置不同的點連無向邊 因為都可以改變 建立了乙個深林,這裡用並查集實現,順便維護每個聯塊的大小,對於每...

關於2018計蒜之道 貝殼找房價效比解題

題意 貝殼找房有乙個價效比比較的系統,對於兩個 a,b,a的 為papa p apa 萬元,面積sasa s asa 平方公尺,b的 為pbpb p bpb 萬元,面積為sbsb s bsb 平方公尺。他們的絕對價效比差定義成為 frackatex parse error expected eof ...

計蒜客(貝殼找房均價計算)

貝殼找房每個月都會計算各個城市房價的均價,計算的最後一步為 將乙個形如 x.yx.y 的小數,用特殊近似法近似到整數。計算完成後會將這個均價展示在首頁供使用者參考。特殊近似法定義為 從最右邊開始四捨五入到整數為止。比如 4.445 rightarrow4.45 rightarrow4.5 right...