QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#503338#7069. FarmemtCompile Error//C++203.6kb2024-08-03 17:47:282024-08-03 17:47:28

Judging History

This is the latest submission verdict.

  • [2024-08-03 17:47:28]
  • Judged
  • [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
*/

详细

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];
      |                     ^