Acwing第 85 场周赛 ABC

https://www.acwing.com/activity/content/2755/

4791. 死或生

题目大意:

给定n组(10个人)对2个犯人(编号1,2)的生死评价,总数:生>=死,活下来,否则嘎了
输入样例1:
2
1 5 5
2 6 4
输出样例1:
LIVE
LIVE
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=10200,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    map<LL,LL> huo,si;
    while(T--)
    {
        LL op,x,y;
        cin>>op>>x>>y;
        huo[op]+=x;
        si[op]+=y;
    }
    if(huo[1]>=si[1]) cout<<"LIVE"<<endl;
    else cout<<"DEAD"<<endl;
    if(huo[2]>=si[2]) cout<<"LIVE"<<endl;
    else cout<<"DEAD"<<endl;
    return 0;
}

4792. 最大价值

题目大意:

a∼z的价值分别为wa,wb,…,wz。字符串S=s1s2…sl,其价值为 ws1×1+ws2×2+…+wsl×l。

在这个字符串s中随意插入k个小写字母,要求最终得到的字符串的价值尽可能大。
输入样例:
abc
3
1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
输出样例:
41
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=10200,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
LL a[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        string s;
        cin>>s;
        LL k;
        cin>>k;
        LL maxn=-MAXN;
        LL sum=0;
        map<char,LL> mp;
        for(int i=1;i<=26;i++)
        {
            cin>>a[i];
            maxn=max(maxn,a[i]);
            mp[char(i+96)]=a[i];
        }
        for(int i=0;i<s.size();i++)
            sum+=mp[s[i]]*(i+1);
        //cout<<sum<<endl;
        LL len=s.size()+1;
        //cout<<maxn<<" "<<len<<endl;
        for(int i=len;i<=len+k-1;i++)
        {

            sum+=maxn*i;
        }
        cout<<sum<<endl;
    }
    return 0;
}

4793. 危险程度

题目大意:

n 种化学物质(编号 1∼n),有m对物质之间会发生反应。 倒入顺序随意,求试管的最大危险值。

已知,空试管的危险值为 1,每倒入一种化学物质,如果该物质能够与之前倒入试管中的一种或多种物质发生反应,则试管的危险值将乘以 2。 
输入样例3:
3 2
1 2
2 3
输出样例3:
4
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=1000,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
LL n,m;
LL father[N];
LL find(LL x)
{
    if(father[x]!=x) father[x]=find(father[x]);
    return father[x];
}
void merge(LL x,LL y)
{
    LL fx=find(x),fy=find(y);
    if(fx!=fy) father[fx]=fy;
}
void init()
{
    for(int i=0;i<=n;i++)
    {
        father[i]=i;
    }
}
int main()
{
    //cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        cin>>n>>m;
        init();
        for(int i=1;i<=m;i++)
        {
            LL x,y;
            cin>>x>>y;
            merge(x,y);
        }
        LL sum=1;
        for(int i=1;i<=n;i++)
        {
            LL fi=find(i);
            if(fi==i) ;
            else sum*=2;
        }
        cout<<sum<<endl;
    }
    return 0;
}

并查集写法,不懂我的dfs写法怎么跑的一塌糊涂

posted @ 2023-01-07 22:01  Vijurria  阅读(9)  评论(0编辑  收藏  举报