hdu 3062 Party 最裸2 sat題目

2021-09-06 07:59:57 字數 1596 閱讀 3182

題意:中文...

思路:來自伍昱的《由對稱性解2-sat問題》

把確定不矛盾的雙方建立邊,然後tarjan縮點。判斷每一對夫妻是否屬於不同的環,如果存在同一環裡,則無解,否則有解

//#pragma comment(linker,"/stack:327680000,327680000")

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define cl(arr, val) memset(arr, val, sizeof(arr))

#define inf 0x7f7f7f7f

#define lc l,m,rt<<1

#define rc m + 1,r,rt<<1|1

#define pi acos(-1.0)

#define ll long long

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) (x) < (y) ? (x) : (y)

#define max(x, y) (x) < (y) ? (y) : (x)

#define e(x) (1 << (x))

#define iabs(x) (x) < 0 ? -(x) : (x)int

#define out(x) printf("%i64d\n", x)

#define lowbit(x) (x)&(-x)

#define read() freopen("din.txt", "r", stdin)

#define write() freopen("dout.txt", "w", stdout);

#define n 2005

using namespace std;

int dfn[n],low[n];

int belong[n],stk[n];

bool ins[n];

int cnt,idx,top;

vectorivc[n];

int n,m;

void tarjan(int u)

else if (ins[v])

}if (dfn[u] == low[u])

while (j != u);

}}void solve()

}//判斷夫妻是否屬於同一環

bool flag = false;

for (i = 0; i < n; ++i)

}if (!flag)

printf("yes\n");

else

printf("no\n");

}void init()

top = idx = cnt = 0;

}int main()

solve();

}return 0;

}

HDU 6521 Party(線段樹 思維)

大致題意 有n個人,一開始相互不認識。他們要去參加party,每次參加的人是編號在區間 l,r 內的人。參加完一次party之後,這區間內的人就會相互認識。現在問你,每次參加party的時候,有多少對人會新認識。首先,在參加這麼多次party的過程中,每個人認識的人的編號顯然是乙個連續的區間。於是,...

hdu6521 Party(吉司機線段樹)

題意 有n個人,一開始所有人互相不認識。現在有m場party,每場給出l,r,表示編號在 l,r 內的所有人參加,參加之後這些人互相認識。現在要求計算每次party之後會有多少對新的互相認識的人,資料範圍 n,m 2e5 解法 因為區間是連續的,令l i 表示第i個人向左方向認識的最大位置 不需要r...

hdu 5017 模擬退火求最值

題意 給乙個橢圓 然後求原點到這個橢圓距離最小的點的距離是多少。解析 依舊用模擬退火。修改了乙個地方,初始溫度從100改到了1,就行了。之前的也修改了。選z的時候,選離遠點近的那個點就行了。pragma comment linker,stack 1677721600 include include ...