QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#503348#7069. FarmemtWA 173ms41536kbC++203.6kb2024-08-03 17:49:262024-08-03 17:49:33

Judging History

This is the latest submission verdict.

  • [2024-08-03 17:49:33]
  • Judged
  • Verdict: WA
  • Time: 173ms
  • Memory: 41536kb
  • [2024-08-03 17:49:26]
  • 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];
        cout<<u<<" "<<v<<" "<<c<<"&&";
        auto [c1,u1,v1,_1] = g[dd];
        cout<<u1<<" "<<v1<<" "<<c1<<"\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
*/

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3692kb

input:

4 6
1 1 2
2 4 3
1 1 4
2 4 4
3 2 4
1 3 4
1
1 2

output:

11

result:

ok single line: '11'

Test #2:

score: 0
Accepted
time: 73ms
memory: 23472kb

input:

100000 500000
2516 13348 191
37713 25720 216
41568 13765 877
2116 27917 895
76904 65435 37
73053 24687 44
97127 44338 700
2251 85769 378
95166 20208 42
59303 57463 158
26863 18030 31
58613 6818 2
15455 18106 254
3232 13720 610
85677 16778 650
25618 72746 813
80365 162 47
10930 7403 645
79272 54568 6...

output:

-1

result:

ok single line: '-1'

Test #3:

score: 0
Accepted
time: 147ms
memory: 41536kb

input:

100000 500000
34497 87538 658
69862 2776 861
93620 16992 904
77910 81200 149
83935 83752 880
17602 75791 259
85887 53289 710
4200 79358 181
8518 19264 737
94665 47462 822
50632 51994 143
55224 59127 656
615 92858 150
48450 9465 58
35713 45287 140
64861 32248 517
70296 45113 153
11189 90316 809
40673...

output:

12148224

result:

ok single line: '12148224'

Test #4:

score: 0
Accepted
time: 139ms
memory: 38288kb

input:

1 500000
1 1 963
1 1 349
1 1 157
1 1 6
1 1 312
1 1 377
1 1 783
1 1 42
1 1 18
1 1 327
1 1 499
1 1 824
1 1 343
1 1 798
1 1 193
1 1 667
1 1 378
1 1 641
1 1 692
1 1 622
1 1 584
1 1 590
1 1 324
1 1 858
1 1 914
1 1 601
1 1 734
1 1 61
1 1 559
1 1 681
1 1 825
1 1 888
1 1 585
1 1 55
1 1 818
1 1 190
1 1 278
1...

output:

1605

result:

ok single line: '1605'

Test #5:

score: -100
Wrong Answer
time: 173ms
memory: 38360kb

input:

5 500000
5 1 817
2 1 273
3 5 674
1 5 15
5 2 872
3 4 728
3 2 807
5 3 28
2 5 96
1 5 100
4 2 224
4 4 980
5 5 727
2 2 520
4 1 29
2 1 142
4 2 963
4 4 118
4 4 615
4 3 719
5 3 200
5 2 746
4 2 68
5 4 859
1 3 182
3 4 286
3 1 229
4 1 895
2 1 730
1 2 622
2 4 913
2 1 697
5 5 130
4 5 507
5 2 425
2 4 716
2 1 884
...

output:

$2 $2 $2 $2 $2
3 3 701&&2 4 696
2 1 473&&5 2 219
2 5 932&&4 5 402
4 3 938&&2 2 447
5 4 433&&2 4 696
5 2 219&&3 3 701
3 4 364&&5 4 852
2 2 447&&3 4 364
2 1 473&&5 4 433
2 5 932&&2 5 932
1 2 836&&2 5 932
2 2 447&&5 4 433
5 2 219&&5 4 433
4 4 140&&3 3 701
2 2 447&&1 3 123
5 4 852&&5 2 219
3219

result:

wrong answer 1st lines differ - expected: '3097', found: '$2 $2 $2 $2 $2'