QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#503338 | #7069. Farm | emt | Compile Error | / | / | C++20 | 3.6kb | 2024-08-03 17:47:28 | 2024-08-03 17:47:28 |
Judging History
This is the latest submission verdict.
- [2024-08-03 17:47:28]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-08-03 17:47:28]
- Submitted
answer
// #pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
using u64 = unsigned long long;
using ld = long double;
using i128 = __int128_t;
using u128 = __uint128_t;
#define int long long
#define mem(a, b) memset((a), (b), sizeof(a))
#define all(a) (a).begin(), (a).end()
#define inf 0x3f3f3f3f
#define lowbit(x) (-x) & x
#define debug cout<<"$"
#define ls u << 1
#define rs u << 1 | 1
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
using pii = pair<int,int>;
mt19937 rnd(time(0));
const int MOD = 998244353;
const ld eps = 1;
int qmi(int m, int k){int res = 1, t = m;while (k){if (k & 1) res = (res * t) % MOD;t = t * t % MOD;k >>= 1;}return res;}
const int N = 5e4 + 7;
void solve()
{
int n,m,q;
cin>>n>>m;
vector<array<int,4>> g(m+1);
vector<int> p(n+1);
vector<int> sp(m+1);
for(int i=1;i<=m;i++)
{
g[i][3] = i;
cin>>g[i][1]>>g[i][2]>>g[i][0];
}
cin>>q;
vector<array<int,2>> re(q);
for(auto &[c,d]:re) cin>>c>>d;
for(auto &[c,d]:re) sp[c] = sp[d] = 1;
iota(all(p),0);
auto find = [&] (auto &&self, int u)->int{if(p[u]!=u) p[u] = self(self,p[u]);return p[u];};
auto merge = [&] (int v, int u)->void{p[find(find,u)] = find(find,v);};
for(int i=1;i<=m;i++)
{
auto [c,u,v,id] = g[i];if(find(find,u)==find(find,v)) continue; merge(u,v);
}
for(int i=2;i<=n;i++) if(find(find,1)!=find(find,i)) return (cout<<"-1\n"), void();
iota(all(p),0);
for(int i=1;i<=m;i++) if(sp[i]) merge(g[i][1],g[i][2]);
int co = 0; auto edg = g; sort(all(edg));
if(n==5) for(int i=1;i<=n;i++) debug<<find(find,i)<<" \n"[i==n];
if(n==5) for(auto [cc,dd]:re)
{
auto [c,u,v,_] = g[cc];
debug<<u<<" "<<v<<" "<<c<<"\n";
auto [c,u,v,_] = g[dd];
debug<<u<<" "<<v<<" "<<c<<"\n";
}
vector<int> E;
for(int i=1;i<=m;i++)
{
auto [c,u,v,id] = edg[i];
if(find(find,u)==find(find,v)) continue;
merge(u,v); co += c;
E.push_back(id);
}
vector<int> rst(n+1), bel(n+1);
iota(all(p),0);
for(auto id:E)
{
auto [c,u,v,_] = g[id];
merge(u,v);
}
int idx = 0; for(int i=1;i<=n;i++)
{
auto z = find(find,i); if(!rst[z]) rst[z] = ++idx;
bel[i] = rst[z];
}
map<array<int,2>,int> ma;
for(int i=1;i<=m;i++)
{
auto [c,u,v,id] = g[i]; u = bel[u], v = bel[v];
if(v==u) continue; if(u>v) swap(u,v);
if(ma.count({u,v})) ma[{u,v}] = c; else ma[{u,v}] = min(ma[{u,v}],c);
}
vector<array<int,3>> left; for(auto [pp,c]:ma)
{
auto [u,v] = pp; left.push_back({c,u,v});
}
p.resize(idx+1);
int ans = 1e9; for(int i=0;i<1<<q;i++)
{
int cur = 0;
iota(all(p),0);
vector<int> w;
set<int> se;
for(int j=0;j<q;j++) if((i>>j)&1) w.push_back(re[j][0]); else w.push_back(re[j][1]);
for(auto id:w) if(!se.count(id))
{
auto [c,u,v,_] = g[id];
u = bel[u], v = bel[v];
cur += c; merge(u,v);se.insert(id);
}
for(auto [c,u,v]:left)
{
if(find(find,u)==find(find,v)) continue;
merge(u,v);cur += c;
}
ans = min(ans,cur+co);
}
cout<<ans<<"\n";
}
signed main()
{
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T = 1;
// cin>>T;
while (T--)
solve();
}
/*
6677667766776677
*/
Details
answer.code: In function ‘void solve()’: answer.code:58:15: error: conflicting declaration ‘auto c’ 58 | auto [c,u,v,_] = g[dd]; | ^ answer.code:56:15: note: previous declaration as ‘std::tuple_element<0, std::array<long long int, 4> >::type&& c’ 56 | auto [c,u,v,_] = g[cc]; | ^ answer.code:58:17: error: conflicting declaration ‘auto u’ 58 | auto [c,u,v,_] = g[dd]; | ^ answer.code:56:17: note: previous declaration as ‘std::tuple_element<1, std::array<long long int, 4> >::type&& u’ 56 | auto [c,u,v,_] = g[cc]; | ^ answer.code:58:19: error: conflicting declaration ‘auto v’ 58 | auto [c,u,v,_] = g[dd]; | ^ answer.code:56:19: note: previous declaration as ‘std::tuple_element<2, std::array<long long int, 4> >::type&& v’ 56 | auto [c,u,v,_] = g[cc]; | ^ answer.code:58:21: error: conflicting declaration ‘auto _’ 58 | auto [c,u,v,_] = g[dd]; | ^ answer.code:56:21: note: previous declaration as ‘std::tuple_element<3, std::array<long long int, 4> >::type&& _’ 56 | auto [c,u,v,_] = g[cc]; | ^