天梯赛 L2-4 大众情人(floyd)

因为数据量很小,所以可以直接floyd
注意是单向边,就是说 g[i][j] 和 g[j][i] 是不一样的
需要注意的地方在注释中已给出
dij太麻烦了,应该要整一个二维数组。因为进行n次dij的时候,i对j,而不是异性对i的。
所以需要把所有的距离弄出来之后,再去再判断,不想写了orz

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#include <map>
#include <vector>
#include<cmath>
#include<stack>
#define IOS 对jios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
using namespace std;

const int maxx = 1e4 + 5;
const int maxn = 1e6 + 5;

#define N 10000100
#define ll long long
#define endl '\n'
const ll  mod = 998244353;
#define test printf("--------------------------\n");
#define re(a) memset((a), 0, sizeof((a)))
#define remax(a) memset((a), 0x3f3f3f3f, sizeof((a)))
#define PII pair<int, int>

int g[510][510];
bool vis[510];//男0女1

int main() {
	IOS;
    int n;
    cin >> n;
    remax(g);
    for (int i = 1; i <= n; ++i)
        g[i][i] = 0;
        for (int y = 1; y <= n; ++y)
        {
            char c;
            int k;
            cin >> c >> k;
            if (c == 'F')
                vis[y] = true;
            for (int i = 0; i < k; ++i)
            {
                string s;
                int a, b;
                cin >> s;
                sscanf(s.c_str(), "%d:%d", &a, &b);
                g[y][a] = b;//注意这里,不是双向的,当时一直处理成双向
            }
        }
    for (int k = 1; k <= n; ++k){
        for (int i = 1; i <= n; ++i){
            for (int j = 1; j <= n; ++j){
                    g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
            }
        }
    }
    vector<PII> vf;
    vector<PII> vm;
    for (int i = 1; i <= n; ++i){
        if(vis[i]){//女性
            int res = -0x3f3f3f;
            for (int j = 1; j <= n; ++j){
                if(!vis[j]){
                    if(g[i][j] != 0x3f3f3f)
                    res = max(res, g[j][i]);//这里也需要注意
                }
            }
            if(res != -0x3f3f3f)
            vf.push_back({res, i});
        }
        else{
            int res = -0x3f3f3f;
            for (int j = 1; j <= n; ++j){
                if(vis[j]){
                    if(res != 0x3f3f3f)
                    res = max(res, g[j][i]);
                }
            }
            if(res != -0x3f3f3f)
            vm.push_back({res, i});
        }
    }
    sort(vf.begin(), vf.end());
    sort(vm.begin(), vm.end());
    int pre = -1;
    vector<int> ans;
    for(auto w : vf){//这里也可以直接输出,但我不想调格式了,所以再创了个ans放答案
        if(pre == -1 || pre == w.first){
            ans.push_back(w.second);
        }
        else
            break;
        pre = w.first;
    }
    pre = -1;
    for (int i = 0; i < ans.size(); ++i){
        if(i == 0)
            cout << ans[0];
        else
            cout << " " << ans[i];
    }
    cout << endl;
    ans.clear();
    for (auto w : vm)
    {
        if (pre == -1 || pre == w.first){
            ans.push_back(w.second);
        }
        else
            break;
        pre = w.first;
    }
        for (int i = 0; i < ans.size(); ++i){
        if(i == 0)
            cout << ans[0];
        else
            cout << " " << ans[i];
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《沙漏情人》是一种寓意深刻的比喻,用来形容两个人之间的感情就像流沙一样匆匆流逝。沙漏象征着时间的流逝,情人象征着我们心中那个特殊的人。就像沙漏中的沙子一样,我们无法拦住时间的流逝,感情也常常无法长久。 这种情况常常出现在刚开始坠入爱河的阶段,当双方情感高涨时,仿佛世界只有他们俩人。然而,随着时间的推移,激情逐渐温和下来,现实与琐事将两人分开。情人之间的相处从甜蜜转变为平淡,而时间的流逝将此情此景淹没。 这个比喻也可以用来形容伴侣关系中的不稳定和不确定。就像沙漏中的砂子不停地滴落,伴侣关系在时间的洪流中也可能会面临不同的挑战和考验。如果不及时修补和调整,时间的沙漏可能只剩下无尽的回忆。 但是,我们也可以从这个比喻中得到一些启示。首先,我们要珍惜眼前的幸福,学会享受当下的美好。其次,我们需要不断努力去维系感情的稳定和和谐。当情感变得平淡时,我们可以通过共同的兴趣爱好和活动,让两人之间的感情更加稳固。 在每个沙漏中,都有一个倒转的时刻,这也是我们重新点燃感情的机会。只要双方愿意一起努力,就能够将沙漏中的流沙重新倒转,为彼此创造更多美好的回忆。 所以,无论沙子怎样流逝,我们都要相信爱情的力量,相信我们可以用心去守护、经营一段真挚的感情。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值