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

【AHOI2013復(fù)仇】SCOI2008 天平

Posted on 2012-09-25 21:26 Mato_No1 閱讀(767) 評論(0)  編輯 收藏 引用 所屬分類: 搜索SCOI
原題地址
本題就是,有N個變量,其取值只可能有三種:1、2、3。現(xiàn)在已知它們之間的一些大小關(guān)系,求有多少對變量(I, J)滿足(I的值+J的值)一定>或=或<(A的值+B的值),A、B是指定的兩個變量,且I、J、A、B互不相同。
首先,對于值相等的變量,直接建出無向圖,按連通塊縮點(diǎn),再考慮大于/小于關(guān)系,如果I的值大于J則在I所在連通塊與J所在連通塊之間連一條有向邊(從I到J)……這樣,凡是既有前趨,又有后繼的點(diǎn)(縮成的點(diǎn),下同),其值只能是2,它的所有前趨的值只能是3,所有后繼的值只能是1。除此以外,木有其它辦法能唯一確定某個變量的值。

接下來最關(guān)鍵的一步——枚舉I、J以及I、J、A、B的值,判斷是否合法:
(1)如果某個變量的值已確定,且與枚舉的值不同,不合法;
(2)如果某個變量有前趨,那么它的值就不能是3;如果有后繼,那么它的值就不能是1;
(3)(這是最容易搞疵的)對于I、J、A、B之間已知的大小關(guān)系,要判斷是否能全部滿足,注意這里的I、J、A、B是指縮成以后的點(diǎn),而不是原來的變量(本沙茶一開始用原來的變量判斷,結(jié)果WA了,后來把數(shù)據(jù)弄下來看了一下,是這里搞疵了囧……不過只跪了2個點(diǎn),總共20個點(diǎn)),因?yàn)橛锌赡芩鼈儽旧碇g木有給出關(guān)系,但那些與它在一個連通塊中的(即與它值相等)的變量之間給出了關(guān)系。

至于枚舉……由于本題數(shù)據(jù)小,只需要暴力枚舉就行了囧……

本題的啟示:考慮問題要周全,要設(shè)法考慮到所有情況。

代碼:
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; 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++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 61, MAXM = 8000, INF = ~0U >> 2;
struct edge {
    
int a, b, pre, next;
} _E[MAXM 
+ MAXM + MAXN], E[MAXM + MAXM + MAXN], E2[MAXM + MAXM + MAXN];
int n, _m, m, No1, No2;
int n0, A[MAXN][MAXN], A2[MAXN][MAXN], Q[MAXN], D[MAXN], W[MAXN], ST[MAXN][MAXN], res1 = 0, res2 = 0, res3 = 0;
bool vst[MAXN];
char ss[MAXN + 1];
void init_d0()
{
    re(i, n) _E[i].pre 
= _E[i].next = i;
    
if (n & 1) _m = n + 1else _m = n;
}
void init_d()
{
    re(i, n0) E[i].pre 
= E[i].next = E2[i].pre = E2[i].next = i; m = n0;
}
void add_edge0(int a, int b)
{
    _E[_m].a 
= a; _E[_m].b = b; _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].pre = _E[b].pre; _E[_m].next = b; _E[b].pre = _m; _E[_E[_m].pre].next = _m++;
}
void add_edge(int a, int b)
{
    E[m].a 
= a; E[m].b = b; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m;
    E2[m].a 
= b; E2[m].b = a; E2[m].pre = E2[b].pre; E2[m].next = b; E2[b].pre = m; E2[E2[m].pre].next = m++;
}
void init()
{
    scanf(
"%d%d%d"&n, &No1, &No2); init_d0(); No1--; No2--;
    re(i, n) {
        scanf(
"%s", ss);
        re(j, n) 
if (i != j) {
            
if (ss[j] == '?') A[i][j] = 0;
            
else if (ss[j] == '+') A[i][j] = 1;
            
else if (ss[j] == '-') A[i][j] = 2else {A[i][j] = 3; add_edge0(i, j);}
        }
    }
}
void prepare()
{
    re(i, n) re(j, n) 
if (i != j) {
        
if (A[i][j] == 1) A[j][i] = 2;
        
if (A[i][j] == 2) A[j][i] = 1;
        
if (A[i][j] == 3) A[j][i] = 3;
    }
    re(i, n) {W[i] 
= 0; vst[i] = 0;} int x, y; n0 = 0;
    re(i, n) 
if (!vst[i]) {
        vst[i] 
= 1; Q[0= i; D[i] = n0;
        
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;
                
if (!vst[y]) {vst[y] = 1; Q[++rear] = y; D[y] = n0;}
            }
        }
        n0
++;
    }
    init_d(); re(i, n0) re(j, n0) A2[i][j] 
= 0;
    re(i, n) re(j, n) 
if (D[i] != D[j]) {
        
if (A[i][j] == 1) add_edge(D[i], D[j]); else if (A[i][j] == 2) add_edge(D[j], D[i]);
    }
    re(i, n) re(j, n) 
if (i != j && A[i][j]) A2[D[i]][D[j]] = A[i][j];
}
void solve()
{
    
int x; re(i, n) re(j, n) ST[i][j] = 0;
    re(i, n0) 
if (E[i].next != i && E2[i].next != i) {
        W[i] 
= 2;
        
for (int p=E[i].next; p != i; p=E[p].next) {
            x 
= E[p].b; W[x] = 1;
        }
        
for (int p=E2[i].next; p != i; p=E2[p].next) {
            x 
= E2[p].b; W[x] = 3;
        }
    }
    
int d1 = D[No1], d2 = D[No2], di, dj;
    re(i, n) re2(j, i
+1, n) if (i != No1 && i != No2 && j != No1 && j != No2) {
        di 
= D[i]; dj = D[j];
        re1(si, 
3) {re1(sj, 3) {re1(s1, 3) {re1(s2, 3) {
            
if (W[di] && si != W[di]) continue;
            
if (W[dj] && sj != W[dj]) continue;
            
if (W[d1] && s1 != W[d1]) continue;
            
if (W[d2] && s2 != W[d2]) continue;
            
if (E[di].next != di && si == 1continue;
            
if (E2[di].next != di && si == 3continue;
            
if (E[dj].next != dj && sj == 1continue;
            
if (E2[dj].next != dj && sj == 3continue;
            
if (E[d1].next != d1 && s1 == 1continue;
            
if (E2[d1].next != d1 && s1 == 3continue;
            
if (E[d2].next != d2 && s2 == 1continue;
            
if (E2[d2].next != d2 && s2 == 3continue;
            
if (A2[di][dj] == 1 && si <= sj) continue;
            
if (A2[di][dj] == 2 && si >= sj) continue;
            
if (A2[di][dj] == 3 && si != sj) continue;
            
if (A2[di][d1] == 1 && si <= s1) continue;
            
if (A2[di][d1] == 2 && si >= s1) continue;
            
if (A2[di][d1] == 3 && si != s1) continue;
            
if (A2[di][d2] == 1 && si <= s2) continue;
            
if (A2[di][d2] == 2 && si >= s2) continue;
            
if (A2[di][d2] == 3 && si != s2) continue;
            
if (A2[dj][d1] == 1 && sj <= s1) continue;
            
if (A2[dj][d1] == 2 && sj >= s1) continue;
            
if (A2[dj][d1] == 3 && sj != s1) continue;
            
if (A2[dj][d2] == 1 && sj <= s2) continue;
            
if (A2[dj][d2] == 2 && sj >= s2) continue;
            
if (A2[dj][d2] == 3 && sj != s2) continue;
            
if (A2[d1][d2] == 1 && s1 <= s2) continue;
            
if (A2[d1][d2] == 2 && s1 >= s2) continue;
            
if (A2[d1][d2] == 3 && s1 != s2) continue;
            
if (s1 + s2 > si + sj) x = 1;
            
else if (s1 + s2 == si + sj) x = 2else x = 3;
            
if (!ST[i][j]) ST[i][j] = x; else if (ST[i][j] != x) {ST[i][j] = -1break;}
        } 
if (ST[i][j] == -1break;} if (ST[i][j] == -1break;} if (ST[i][j] == -1break;}
    }
    re(i, n) re2(j, i
+1, n) if (ST[i][j] == 1) res1++else if (ST[i][j] == 2) res2++else if (ST[i][j] == 3) res3++;
}
void pri()
{
    printf(
"%d %d %d\n", res1, res2, res3);
}
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>
            亚洲一区在线播放| 在线播放日韩| 亚洲欧美成人网| 亚洲第一区中文99精品| 国内精品久久久久久久影视蜜臀| 老鸭窝毛片一区二区三区| av成人免费| 韩国女主播一区二区三区| 国内外成人在线视频| 国产精品美女久久久| 欧美日韩在线播放三区| 国产精品国产三级国产普通话99 | 亚洲国产精品女人久久久| 欧美亚男人的天堂| 欧美片第1页综合| 国产精品毛片va一区二区三区 | 久久国产免费看| 亚洲欧美在线高清| 欧美在线免费观看视频| 久久综合成人精品亚洲另类欧美| 亚洲精品日韩久久| 亚洲人精品午夜在线观看| 欧美高清在线| 久久精品日韩| 亚洲精品视频在线播放| 一区二区三区福利| 国产精品户外野外| 一本色道久久综合| 欧美一区二区视频网站| 欧美亚洲视频一区二区| 久久久久久久性| 欧美刺激性大交免费视频| 欧美午夜片欧美片在线观看| 国产精品拍天天在线| 免费视频一区| 欧美性猛交99久久久久99按摩 | 亚洲欧洲美洲综合色网| 亚洲国产另类久久精品| 亚洲欧美国产视频| 久久激情综合| 欧美体内谢she精2性欧美| 狠狠综合久久av一区二区老牛| 亚洲激情六月丁香| 亚洲女同同性videoxma| 老司机一区二区| 亚洲欧美www| 欧美精品18+| 国内揄拍国内精品少妇国语| 亚洲综合色在线| 欧美激情综合色| 性久久久久久久久| 国产精品男女猛烈高潮激情| 亚洲激情视频网站| 久久国产精品久久久久久| 亚洲人体偷拍| 乱码第一页成人| 国产一区二区久久精品| 欧美一区二区三区精品电影| 欧美xxxx在线观看| 亚洲欧美久久久久一区二区三区| 亚洲女同同性videoxma| 国产精品乱码| 在线综合+亚洲+欧美中文字幕| 久久人人97超碰人人澡爱香蕉| 亚洲欧美日韩综合一区| 欧美日韩亚洲激情| 91久久国产综合久久| 亚洲国产91| 久久一区二区三区四区五区| 国产欧美日韩| 日韩午夜电影在线观看| 亚洲黄色成人网| 久久免费精品视频| 国产一区二区在线免费观看| 久久国产日韩欧美| 亚洲视频你懂的| 欧美色一级片| 欧美亚洲一区| 亚洲在线视频观看| 国产精品久久久久久模特| 99国产精品视频免费观看| 欧美不卡在线| 海角社区69精品视频| 另类春色校园亚洲| 欧美在线视频导航| 国产在线高清精品| 欧美国产精品人人做人人爱| 久久久久久欧美| 亚洲第一中文字幕| 欧美国产高清| 欧美精品免费看| 日韩视频一区二区在线观看| 在线中文字幕不卡| 国产精品美女久久久久久久| 亚洲欧美另类在线| 久久视频国产精品免费视频在线| 国产一区二区三区在线观看视频 | 亚洲精品一区二区网址| 久久精品国产69国产精品亚洲| 欧美日韩成人一区二区三区| 一本一本久久a久久精品牛牛影视| 日韩视频在线观看免费| 国产精品久久中文| 久久精品国产久精国产爱| 欧美一区二区精品久久911| 欧美一区国产一区| 亚洲国产精品视频一区| 亚洲欧洲日韩综合二区| 国产日韩在线看片| 免费在线播放第一区高清av| 欧美成人一区二免费视频软件| 亚洲在线免费观看| 欧美在线观看视频一区二区| 亚洲电影av| 国产精品yjizz| 欧美91大片| 欧美三级电影精品| 久久精品男女| 国产精品美女www爽爽爽视频| 久久视频在线看| 欧美日韩国产精品一区二区亚洲| 老司机免费视频一区二区| 欧美另类变人与禽xxxxx| 欧美亚洲一区二区在线观看| 欧美精品在线一区二区| 久久久久国产精品一区| 欧美国产一区在线| 欧美成人官网二区| 国产精品一区久久久久| 欧美1区免费| 欧美日韩一区二区在线播放| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久久五月尺| 欧美国产91| 亚洲国产婷婷香蕉久久久久久| av成人激情| 日韩视频免费在线观看| 欧美成人免费观看| 另类尿喷潮videofree| 亚洲主播在线播放| 欧美激情一区二区三级高清视频| 久久久欧美精品sm网站| 欧美三区在线| 欧美激情一区二区三区 | 久久久999精品| 欧美日韩一区二区三区| 欧美一区二区日韩| 国产手机视频精品| 亚洲一区欧美| 亚洲女与黑人做爰| 欧美日韩在线一区二区三区| 欧美一区二区三区四区夜夜大片| 欧美在线网址| 欧美不卡高清| 国产在线视频不卡二| 午夜欧美大尺度福利影院在线看| 欧美在线高清视频| 国产精品嫩草影院一区二区| 日韩一区二区精品在线观看| 一区二区欧美精品| 欧美高清在线观看| 亚洲精品国精品久久99热| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美亚州韩日在线看免费版国语版| 亚洲无毛电影| 免费影视亚洲| 亚洲永久精品国产| 激情小说另类小说亚洲欧美| 欧美国产欧美亚洲国产日韩mv天天看完整 | 一区二区高清视频| 久久精品国产综合精品| 亚洲国产乱码最新视频| 欧美日韩一区二区在线观看视频| 亚洲欧美国产另类| 欧美va亚洲va国产综合| 亚洲欧美日本国产有色| 狠狠久久亚洲欧美| 欧美日韩国产免费| 久久久www| 亚洲性感美女99在线| 欧美激情小视频| 久久久最新网址| 宅男噜噜噜66国产日韩在线观看| 国产欧美在线视频| 欧美日韩激情小视频| 久久精品国产精品| 亚洲免费精彩视频| 欧美国产日韩一区| 久久久久久久久久久久久久一区| 99精品国产在热久久下载| 韩日午夜在线资源一区二区| 欧美日韩一区二区三区视频| 久久久久久久综合日本| 亚洲欧美综合精品久久成人| 亚洲三级视频在线观看| 免费成人高清视频| 久久精品中文字幕一区| 亚洲免费在线视频| 一区二区高清在线| 日韩午夜免费视频|