@[张一2010](/user/1038838)
不用ans,if(a==b)直接输出在z[i].c
那个~~不务正业的~~市长只看影响最大的
by Tommyzheng11 @ 2024-04-16 17:52:13
f[a]=find(z[i].b+n),f[b]=find(z[i].a+n);
还有你的合并什么鬼······貌似越界了
by Tommyzheng11 @ 2024-04-16 17:53:26
你要做的是把敌人的敌人和自己放在一个监狱
不这样的话,因为每个犯人的敌人都是边处理边统计的且只有两个监狱~~好少~~,所以会使前面影响力更大的发生,就算自己与敌人的敌人见有矛盾,也是还未统计的,会比较小
by Tommyzheng11 @ 2024-04-16 17:56:48
体锻完了吗?跑了几圈啊
~~吹着空调真爽~~
by Tommyzheng11 @ 2024-04-16 17:57:47
@[Tommyzheng11](/user/680584) 我竟然 [AC](https://www.luogu.com.cn/record/156119102) 了。我初始化只到n,忘记*2了,你不会没理解我代码吧,这都没发现,XUN BI!!!
by 张一2010 @ 2024-04-17 17:29:41
XUN,不同方法
by Tommyzheng11 @ 2024-04-18 11:21:43
@[张一2010](/user/1038838) 我应该和你看的是一个作品,我的乘了2,也只有十分,还没找到错误
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>
#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"
using namespace std;
typedef long long ll;
const int N = 2e4 + 5;
const int M = 1e5 + 5;
int n, m;
int fa[N * 2];
int ans;
struct zf
{
int a;
int b;
int c;
bool operator<(struct zf t)
{
return c < t.c;
}
}zf[M];
int find(int son)
{
if (fa[son] == son)
return son;
return fa[son] = find(fa[son]);
}
int FindMin()
{
for (int i = 0; i < m; i++)
{
if (find(zf[i].a) == find(zf[i].b))//如果两个在同一集合------->已经分好两组了------->则他们之间的边权就是答案
{
return zf[i].c;
}
else//如果两个不在同一集合,则分别列入对方的敌人集合
{
fa[find(zf[i].a)] = find(zf[i].b + n);
fa[find(zf[i].b)] = find(zf[i].a + n);
}
}
return 0;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
cin >> zf[i].a >> zf[i].b >> zf[i].c;
}
sort(zf, zf + m);//排序所有边
for (int i = 1; i <= 2 * n; i++)
{
fa[i] = i;//i >= n的存的是敌人
}
ans = FindMin();
cout << ans << endl;
return 0;
}
```
by ruanertanjing @ 2024-05-05 20:08:09