青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

NOI2008 party

Posted on 2011-07-14 12:23 Mato_No1 閱讀(504) 評論(0)  編輯 收藏 引用 所屬分類: 圖算法NOI
原題見這里(BZOJ和BSOJ都掛了,真杯具,只能借助RQ了囧……)

難度不是很大,就是特殊情況比較多,比較猥瑣(不過本題數(shù)據(jù)弱,就算不考慮所有的特殊情況也能過7個點(diǎn))。
首先O(NM)的樸素算法很好想到:枚舉K,然后給每個結(jié)點(diǎn)編號即可。在編號時,先隨便指定一個未編號的點(diǎn),設(shè)它的編號為0,然后遍歷所有和它相關(guān)聯(lián)的邊(這里可以把原圖想象成一個無向圖),將這些邊的另一個端點(diǎn)編上號即可,中間若某個點(diǎn)的編號出現(xiàn)矛盾,則這個K不合法,否則這個K合法。
然后進(jìn)行優(yōu)化:合法的K實際上是有限制的,它必然是某個數(shù)的因數(shù),具體來說,對這個圖進(jìn)行DFS,并考察其中所有的跨越邊和逆向邊,對于跨越邊<i, j>,設(shè)遍歷樹中i、j間距離為D,則合法的K必然是(D-1)的因數(shù)(因為i和遍歷樹中j的父結(jié)點(diǎn)都有指向j的邊,它們的編號應(yīng)相同,而它們之間的距離為(D-1));對于逆向邊<i, j>,設(shè)遍歷樹中i、j間距離為D',則合法的K必然是(D'+1)的因數(shù)(因為這里形成了一個環(huán),環(huán)的長度為(D'+1))。這樣一來就明顯縮小了K的取值范圍,再進(jìn)行枚舉,就可以顯著縮短時間。

下面是一些極其猥瑣的特殊情況:
(1)根據(jù)題意,必須是K類每類都有,因此在嘗試編號成功(沒有發(fā)生任何矛盾)后,還要看一下實際出現(xiàn)的編號數(shù)目是否等于K,若小于K,同樣不合法;
(2)該圖的基圖可能不連通,此時對于其基圖的每個連通塊,其編號互不影響,所以要對每個連通塊分別統(tǒng)計實際出現(xiàn)的編號數(shù)目,設(shè)它們的和為SUM,則不大于SUM的K值均合法(只要中間不出現(xiàn)矛盾),因此可以直接得到最大值為SUM,提前結(jié)束;不過,這種特判只有在總共實際出現(xiàn)的編號數(shù)目小于K的情況下才能進(jìn)行;
(3)由于考察的是實際出現(xiàn)的編號數(shù)目,因此最后求出的最大值、最小值可能小于3,這時應(yīng)作出如下處理:若最大值小于3,則無解;若最小值小于3,則將最小值改為3。

本題比較猥瑣的數(shù)據(jù)是第4、5、6個點(diǎn),分別出現(xiàn)了上述的第(1)、(2)、(3)種特殊情況,此外,這三個點(diǎn)建出的圖中竟然沒有一條跨越邊或逆向邊!

代碼:
#include <iostream>
#include 
<stdio.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
const int MAXN = 100000, MAXM = 1100001;
struct edge {
    
int a, b, s, pre, next;
} E0[MAXM], E[MAXM 
+ MAXM];
int n, m0, m, P, len, X[MAXN], No[MAXN], stk[MAXN], st[MAXN], dep[MAXN], V[MAXN], fo[MAXN], Q[MAXN], res0, res1;
bool vst[MAXN], T0[MAXN];
long long T[MAXN], _Z = 0;
void init_d()
{
    re(i, n) E[i].a 
= E[i].pre = E[i].next = E0[i].a = E0[i].pre = E0[i].next = i;
    m0 
= n; if (n % 2) m = n + 1else m = n;
}
void add_edge(int a, int b)
{
    E0[m0].a 
= a; E0[m0].b = b; E0[m0].pre = E0[a].pre; E0[m0].next = a; E0[a].pre = m0; E0[E0[m0].pre].next = m0++;
    E[m].a 
= a; E[m].b = b; E[m].s = 1; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m++;
    E[m].a 
= b; E[m].b = a; E[m].s = -1; E[m].pre = E[b].pre; E[m].next = b; E[b].pre = m; E[E[m].pre].next = m++;
}
void init()
{
    freopen(
"party.in""r", stdin);
    
int _m, a, b; scanf("%d%d"&n, &_m); init_d();
    re(i, _m) {
        scanf(
"%d%d"&a, &b);
        add_edge(
--a, --b);
    }
    fclose(stdin);
}
int gcd(int a, int b)
{
    
int r;
    
while (b) {
        r 
= a % b; a = b; b = r;
    }
    
return a;
}
void prepare()
{
    
int tp, x, y, ord = 0;
    
bool fd;
    re(i, n) V[i] 
= 0; P = 0;
    re(i, n) 
if (!V[i]) {
        stk[tp 
= 0= i; fo[i] = ord++; V[i] = 1; st[i] = E0[i].next; dep[i] = 0;
        
while (tp >= 0) {
            x 
= stk[tp]; fd = 0;
            
for (int p=st[x]; p != x; p=E0[p].next) {
                y 
= E0[p].b;
                
if (!V[y]) {
                    stk[
++tp] = y; fo[y] = ord++; V[y] = 1; st[y] = E0[y].next; dep[y] = dep[x] + 1; st[x] = E0[p].next; fd = 1break;
                } 
else if (V[y] == 1) P = gcd(P, dep[x] - dep[y] + 1); else if (fo[y] > fo[x]) P = gcd(P, dep[y] - dep[x] - 1);
            }
            
if (!fd) {V[x] = 2; tp--;}
        }
    }
    len 
= 0; re3(i, 3, n) if (!(P % i)) X[len++= i;
}
int test(int K)
{
    re(i, n) {vst[i] 
= 0; No[i] = -1;}
    re(i, K) T0[i] 
= 0;
    
int x, y, No0, sum = 0, sum0 = 0;
    re(i, n) 
if (!vst[i]) {
        No[i] 
= 0; Q[0= i; vst[i] = 1; _Z++if (T[0!= _Z) {T[0= _Z; sum++;} if (!T0[0]) {T0[0= 1; sum0++;}
        
for (int front=0, rear=0; front<=rear; front++) {
            x 
= Q[front];
            
for (int p=E[x].next; p != x; p=E[p].next) {
                y 
= E[p].b; No0 = No[x] + E[p].s;
                
if (No0 == K) No0 = 0else if (No0 == -1) No0 = K - 1;
                
if (No[y] >= 0 && No0 != No[y]) return -1else {
                    No[y] 
= No0;
                    
if (T[No0] != _Z) {T[No0] = _Z; sum++;}
                    
if (!T0[No0]) {T0[No0] = 1; sum0++;}
                }
                
if (!vst[y]) {vst[y] = 1; Q[++rear] = y;}
            }
        }
    }
    
if (sum0 < K) res0 = sum;
    
return sum0;
}
void solve()
{
    
int K, K0; res0 = res1 = -1;
    re(i, len) {
        K 
= X[i]; K0 = test(K);
        
if (K0 != -1) {
            
if (res1 == -1) res1 = K0;
            
if (K0 < K) breakelse res0 = K;
        }
    }
    
if (res0 < 3) res0 = res1 = -1else if (res1 < 3) res1 = 3;
}
void pri()
{
    freopen(
"party.out""w", stdout);
    printf(
"%d %d\n", res0, res1);
    fclose(stdout);
}
int main()
{
    init();
    prepare();
    solve();
    pri();
    
return 0;
}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人精精品一区二区频| 亚洲午夜激情| 欧美亚洲专区| 宅男66日本亚洲欧美视频| 国产一区二区三区丝袜| 欧美日本乱大交xxxxx| aa国产精品| 91久久极品少妇xxxxⅹ软件| 久久精品中文| 午夜精彩视频在线观看不卡| 日韩写真在线| 亚洲精品网站在线播放gif| 国产欧美日韩另类视频免费观看| 国产精品日日摸夜夜添夜夜av| 欧美午夜精品一区| 欧美视频在线不卡| 欧美午夜电影在线观看| 欧美日韩一区在线观看视频| 欧美国产激情二区三区| 久久久久一区二区三区四区| 六月天综合网| 美女任你摸久久| 久久资源在线| 美女视频网站黄色亚洲| 久久久亚洲午夜电影| 久久久久久网站| 欧美精品乱人伦久久久久久| 欧美日韩岛国| 欧美精品亚洲精品| 欧美日韩一级片在线观看| 欧美精品1区2区| 欧美视频福利| 亚洲欧洲日本一区二区三区| 日韩亚洲欧美一区| 久久精品99国产精品| 免费在线成人av| 亚洲精品乱码久久久久久黑人| 亚洲国产欧美一区二区三区久久 | 欧美网站大全在线观看| 国产精品免费看| 国产欧美精品| 1769国产精品| 亚洲理伦电影| 国产精品久久久久久五月尺| 一区二区三区在线免费播放| 一本一本久久| 久久精品官网| 亚洲国产高清一区| 一本色道综合亚洲| 久久久国产精品一区二区三区| 欧美 日韩 国产在线 | 亚洲精品一二| 午夜精品免费在线| 欧美日韩在线观看视频| 亚洲国产一区二区a毛片| 久久久精品国产免费观看同学| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧美日本国产有色| 欧美成人一品| 久久综合精品国产一区二区三区| 好吊色欧美一区二区三区视频| 亚洲嫩草精品久久| 亚洲日本一区二区| 欧美在线1区| 欧美日韩国产色视频| 在线播放日韩欧美| 久久精品国产999大香线蕉| 欧美激情导航| 久久福利精品| 国产精品捆绑调教| 久久精品综合| 亚洲一区二区欧美日韩| 欧美精品激情在线| 亚洲精品视频免费观看| 久久久午夜电影| 欧美大片免费观看| 亚洲视频网在线直播| 一区二区欧美国产| 欧美视频亚洲视频| 99在线精品观看| 亚洲精品久久视频| 国产免费成人在线视频| 久久精品系列| 久久久久综合网| 国内精品视频666| 1000精品久久久久久久久| 亚洲第一网站免费视频| 国产精品毛片大码女人| 一区二区久久久久| 亚洲区中文字幕| 免费一级欧美片在线观看| 国内外成人在线视频| 亚洲一区高清| 日韩一区二区精品在线观看| 久久久久综合一区二区三区| 99re8这里有精品热视频免费| 欧美一二三视频| 午夜国产精品视频| 销魂美女一区二区三区视频在线| 亚洲欧美日韩精品久久亚洲区| 国产伦精品一区二区三区免费迷| 亚洲女优在线| 免费在线观看日韩欧美| 久久激情综合| 国产精品亚洲欧美| 99精品99| 亚洲视频1区2区| 欧美巨乳在线观看| 亚洲国内精品| 亚洲区一区二| 欧美国产高潮xxxx1819| 欧美成人精品福利| 亚洲国产欧美在线人成| 久久一区国产| 欧美国产日韩在线| 亚洲日本中文字幕区| 欧美1区2区视频| 亚洲国产激情| 99国产精品私拍| 欧美高清在线视频| 欧美肥婆bbw| 亚洲第一黄色网| 最新国产精品拍自在线播放| 欧美日韩国产小视频| 亚洲欧美国产毛片在线| 欧美在线资源| 狠狠色丁香婷婷综合| 久久久精品网| 蜜臀av国产精品久久久久| 999在线观看精品免费不卡网站| 亚洲精品久久嫩草网站秘色| 欧美无乱码久久久免费午夜一区 | 精品999日本| 久久在线免费观看视频| 99热这里只有成人精品国产| 国产精品美女久久久久久久 | 久久在线91| 狠狠色综合色区| 亚洲精品资源| 伊人婷婷久久| 亚洲精品一区二区三区樱花| 国产精品网红福利| 欧美国产日韩精品| 国产美女一区| 午夜精品久久久久久99热软件| 亚洲午夜激情网页| 又紧又大又爽精品一区二区| 久久久精品tv| 亚洲国产精品久久久久久女王| 国精品一区二区三区| 美国成人毛片| 久久久久久国产精品mv| 国产自产女人91一区在线观看| 亚洲丰满在线| 红杏aⅴ成人免费视频| 久久午夜精品| 国产精品你懂的在线| 欧美激情国产精品| 亚洲人成网站777色婷婷| 国产精品一二一区| 99亚洲一区二区| 国产日韩欧美电影在线观看| 亚洲一区二区三区高清不卡| 欧美一区二区三区免费看| 亚洲一区二区三区成人在线视频精品| 亚洲精品中文字| 欧美久久婷婷综合色| 欧美电影资源| 国一区二区在线观看| 久久久国产成人精品| 一区二区三区欧美亚洲| 午夜一区二区三区不卡视频| 免费成人av资源网| 久久精品亚洲乱码伦伦中文| 亚洲欧美美女| 欧美大秀在线观看| 久久激情网站| 国产精品爽爽ⅴa在线观看| 亚洲国产欧美一区| 国产一区二区高清不卡| 亚洲毛片在线| 亚洲视频免费观看| 欧美一区二区高清在线观看| 国产真实久久| 亚洲三级免费| 狠狠综合久久av一区二区小说| 亚洲一区欧美二区| 一本色道久久加勒比精品| 欧美理论电影在线观看| 亚洲精品美女在线观看播放| 欧美午夜宅男影院在线观看| 欧美国产精品v| 99国产一区| 国产精品成人观看视频国产奇米| 久久色在线播放| 日韩视频不卡中文| 在线精品观看| 国产麻豆精品theporn| 欧美国产精品v| 亚洲永久字幕|