답안 #829842

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
829842 2023-08-18T15:20:58 Z tolbi 철인 이종 경기 (APIO18_duathlon) C++17
31 / 100
505 ms 1048576 KB
#pragma optimize("Bismillahirrahmanirrahim")
//█▀█─█──█──█▀█─█─█
//█▄█─█──█──█▄█─█■█
//█─█─█▄─█▄─█─█─█─█
//Allahuekber
//ahmet23 orz...
//FatihSultanMehmedHan
//YavuzSultanSelimHan
//AbdulhamidHan
//Sani buyuk Osman Pasa Plevneden cikmam diyor
#define author tolbi
#include <bits/stdc++.h>
using namespace std;
#define deci(x) int x;cin>>x;
#define decstr(x) string x;cin>>x;
#define sortarr(x) sort(x.begin(), x.end())
#define sortrarr(x) sort(x.rbegin(), x.rend())
#define rev(x) reverse(x.begin(), x.end())
#define cinarr(x) for (auto &it : x) cin>>it;
#define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl;
#define tol(bi) (1LL<<((int)(bi)))
#define endl '\n'
#define int long long
//mt19937 ayahya(chrono::high_resolution_clock().now().time_since_epoch().count());
int solve(int n, vector<int> u, vector<int> v){
    int totn = n;
    vector<vector<int>> arr(n);
    for (int i = 0; i < u.size(); i++){
        arr[u[i]].push_back(v[i]);
        arr[v[i]].push_back(u[i]);
    }
    vector<int> dept(n,-1);
    vector<int> stk;
    vector<int> ele(n);
    vector<int> sz;
    vector<vector<int>> hehe;
    function<int(int,int)> f;
    vector<int> par(n);
    f = [&](int node, int lnode)->int{
        if (lnode!=-1) par[node]=lnode;
        if (lnode!=-1) dept[node]=dept[lnode]+1;
        int mide = dept[node];
        for (int i = 0; i < arr[node].size(); i++){
            if (arr[node][i]==lnode) continue;
            if (dept[arr[node][i]]!=-1){
                mide=min(mide,dept[arr[node][i]]);
                continue;
            }
            mide=min(mide,f(arr[node][i],node));
        }
        stk.push_back(node);
        if (mide==dept[node]){
            sz.push_back(0);
            while (stk.size()){
                ele[stk.back()]=hehe.size();
                stk.pop_back();
                sz.back()++;
            }
            hehe.push_back(vector<int>());
        }
        return mide;
    };
    dept[0]=0;
    f(0,-1);
    for (int i = 1; i < n; i++){
        if (ele[i]!=ele[par[i]]){
            hehe[ele[i]].push_back(ele[par[i]]);
            hehe[ele[par[i]]].push_back(ele[i]);
        }
    }
    n=hehe.size();
    dept[0]=0;
    swap(arr,hehe);
    int ans = 0;
    for (int i = 0; i < sz.size(); i++){
        ans+=sz[i]*(sz[i]-1)*(sz[i]-2);
    }//3 from cycle
    vector<int> subsz(n);
    //coutarr(sz);
    f = [&](int node, int lnode)->int{
        subsz[node]=sz[node];
        for (int i = 0; i < arr[node].size(); i++){
            if (arr[node][i]==lnode) continue;
            f(arr[node][i],node);
            subsz[node]+=subsz[arr[node][i]];
            ans+=(subsz[arr[node][i]])*(sz[node])*(totn-subsz[arr[node][i]]-sz[node]);
            //2 from outside, 1 from cycle
            ans+=(sz[node]-1)*(sz[node]-1)*subsz[arr[node][i]]*2;
            //2 from cycle, 1 from outside
        }
        ans+=(sz[node]-1)*(sz[node]-1)*(totn-subsz[node])*2;
        ans+=(sz[node])*(totn-subsz[node])*(subsz[node]-sz[node]);
        return 23;
    };
    f(0,-1);
    return ans;
}
int32_t main(){
	int T = 1;
	int tno = 0;
	while (T-(tno++)){
        deci(n);deci(m);
        vector<int> par(n);
        iota(par.begin(), par.end(), 0);
        function<int(int)> find;
        find = [&](int node)->int{
        	if (par[node]==node) return node;
        	return par[node]=find(par[node]);
        };
        vector<pair<int,int>> edges(m);
        for (int i = 0; i < m; i++){
        	cin>>edges[i].first>>edges[i].second;
        	edges[i].first--,edges[i].second--;
        	int u = edges[i].first;
        	int v = edges[i].second;
        	u=find(u);
        	v=find(v);
        	par[u]=v;
        }
        map<int,int> mp;
        map<int,vector<int>> u;
        map<int,vector<int>> v;
        vector<int> indis(n);
        for (int i = 0; i < n; i++){
        	indis[i]=mp[find(i)]++;
        }
        for (int i = 0; i < m; i++){
        	u[find(edges[i].first)].push_back(indis[edges[i].first]);
        	v[find(edges[i].first)].push_back(indis[edges[i].second]);
        }
        int ans = 0;
        for (auto it : mp){
        	ans+=solve(it.second,u[it.first],v[it.first]);
            u.erase(it.first);
            v.erase(it.first);
        }
        cout<<ans<<endl;
	}
}

Compilation message

count_triplets.cpp:1: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    1 | #pragma optimize("Bismillahirrahmanirrahim")
      | 
count_triplets.cpp: In function 'long long int solve(long long int, std::vector<long long int>, std::vector<long long int>)':
count_triplets.cpp:28:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |     for (int i = 0; i < u.size(); i++){
      |                     ~~^~~~~~~~~~
count_triplets.cpp: In lambda function:
count_triplets.cpp:43:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |         for (int i = 0; i < arr[node].size(); i++){
      |                         ~~^~~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'long long int solve(long long int, std::vector<long long int>, std::vector<long long int>)':
count_triplets.cpp:75:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |     for (int i = 0; i < sz.size(); i++){
      |                     ~~^~~~~~~~~~~
count_triplets.cpp: In lambda function:
count_triplets.cpp:82:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |         for (int i = 0; i < arr[node].size(); i++){
      |                         ~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Runtime error 505 ms 1048576 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Runtime error 505 ms 1048576 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 92 ms 25840 KB Output is correct
2 Correct 107 ms 25872 KB Output is correct
3 Correct 91 ms 20540 KB Output is correct
4 Correct 83 ms 21064 KB Output is correct
5 Correct 79 ms 15332 KB Output is correct
6 Correct 86 ms 21840 KB Output is correct
7 Correct 83 ms 11724 KB Output is correct
8 Correct 82 ms 16624 KB Output is correct
9 Correct 75 ms 8932 KB Output is correct
10 Correct 75 ms 10908 KB Output is correct
11 Correct 122 ms 11808 KB Output is correct
12 Correct 115 ms 11136 KB Output is correct
13 Correct 114 ms 12760 KB Output is correct
14 Correct 115 ms 12068 KB Output is correct
15 Correct 102 ms 13388 KB Output is correct
16 Correct 108 ms 12796 KB Output is correct
17 Correct 49 ms 8104 KB Output is correct
18 Correct 48 ms 8156 KB Output is correct
19 Correct 47 ms 8148 KB Output is correct
20 Correct 67 ms 8148 KB Output is correct
21 Correct 48 ms 8136 KB Output is correct
22 Correct 50 ms 8104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
4 Correct 1 ms 560 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 1 ms 560 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 1 ms 564 KB Output is correct
10 Correct 1 ms 468 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 1 ms 436 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 1 ms 300 KB Output is correct
15 Correct 1 ms 304 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 468 KB Output is correct
18 Correct 1 ms 468 KB Output is correct
19 Correct 1 ms 468 KB Output is correct
20 Correct 1 ms 444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 110 ms 23288 KB Output is correct
2 Correct 103 ms 22928 KB Output is correct
3 Correct 104 ms 22844 KB Output is correct
4 Correct 95 ms 22832 KB Output is correct
5 Correct 96 ms 22852 KB Output is correct
6 Correct 123 ms 35688 KB Output is correct
7 Correct 102 ms 27700 KB Output is correct
8 Correct 109 ms 26432 KB Output is correct
9 Correct 100 ms 25140 KB Output is correct
10 Correct 88 ms 14632 KB Output is correct
11 Correct 92 ms 21184 KB Output is correct
12 Correct 83 ms 10168 KB Output is correct
13 Correct 84 ms 9388 KB Output is correct
14 Correct 106 ms 8140 KB Output is correct
15 Correct 108 ms 9580 KB Output is correct
16 Correct 105 ms 11768 KB Output is correct
17 Correct 79 ms 24968 KB Output is correct
18 Correct 79 ms 24328 KB Output is correct
19 Correct 83 ms 24948 KB Output is correct
20 Correct 79 ms 24072 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 436 KB Output is correct
2 Correct 2 ms 436 KB Output is correct
3 Runtime error 389 ms 1048576 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 97 ms 23652 KB Output is correct
2 Correct 97 ms 23344 KB Output is correct
3 Runtime error 472 ms 1048576 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Runtime error 505 ms 1048576 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Runtime error 505 ms 1048576 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -