time limit: 10 sec memory limit: 64 mb
submit: 1810 solved: 684
[submit][status][discuss]
2 6 9
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6
1 4 2 5 3 6
5 5
1 2
2 3
3 4
4 5
5 1
1 2 3 4 5
noyes
思路:(from 出題人):
如果只考慮簡單的平面圖判定,這個問題是非常不好做的。但是題目中有乙個條件——這張圖存在一條哈密頓迴路。
我們把哈密頓迴路在平面上畫成乙個圓。仔細觀察一下。每條邊如果畫在圓內都是一條弦,那如果弦在圓內相交怎麼辦?把另一條弦翻出去。能不能兩條弦都翻出去呢?不能,因為如果兩條邊在圓內相交,那麼它們在圓外也會相交。那我們是不是就相當於就多了乙個條件:這兩條邊不能同時在乙個域內。
所以,這張圖中總共只有兩個域,圓內和圓外。那麼我們是不是就轉化了模型:有若干個點和若干條邊,你要給每個點黑白染色,使得每條邊的兩個端點顏色不同。直接dfs就可以了。還有個問題,邊數是10^4,暴力連邊會超時,但是平面圖有乙個定理:m<=3*n+6,那這個定理來剪枝就行了。
然後我們只要對輸入的哈密頓環進行標號,然後這樣就是乙個圈,假定剛開始都是在圈內,然後我們只需要判斷是否在圈內就行了。
好像我的**因為用了map和edges這些東西,所以跑的速度比別人慢乙個log= =,別人都是200ms左右,我是2000ms,人生第一次體驗到了map所帶來的絕望
#include usingview codenamespace
std;
#pragma comment(linker,"/stack:102400000,102400000")
#define ll long long
#define all(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const
int maxn = 1e5 + 5
;struct
twosat
void add_edge(int x, int xval, int y, int
yval)
void
display()
cout
<}}
bool dfs(int
x)
return
true
; }
bool
solve()}}
return
true
; } };
twosat tar;
intn, m;
mapid;
mapint, int>, int>point;
vector
int, int> >edges;
bool test(int u1, int v1, int u2, int
v2)
intmain()
for (int i = 1; i <= n; i++)
if (m >= n * 3 + 6
) tar.init(m);
for (int i = 0; i < m; i++)}}
if (tar.solve()) puts("
yes"
);
else puts("no"
); }
return0;
}
R語言 資料轉化2
資料框的轉置 行與列的轉置t 函式,單獨轉置一行利用rev函式即可用於向量也可用於資料框 修改資料框中的值 eg 將women資料集中身高英吋換位厘公尺 為單位 如果需要修改的值較多上面的方法就不高效率,可以利用transfor函式可以任意修改資料框中列的值 如果不想修改原資料那麼可以再定義乙個值 ...
進製轉化(10 gt 2)
用雙向動態鍊錶儲存資料,沒有資料大小限制 可以轉換負數 include stdio.h include malloc.h intmain void struct num2 p,q,head,end intnum unsigned x scanf d num x unsigned num 將有符號變數...
2 條件語句
python條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。python程式語言指定任何非0和非空 null 值為true,0 或者 null為false。python 程式設計中 if 語句用於控制程式的執行,基本形式為 if 判斷條件 執行語句 else 執行語...