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 #include6 #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...