題意:中文...
思路:來自伍昱的《由對稱性解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 ...