A.患者的编号

给出一个有向图,要求你输出字典序最小的拓扑排序。

常规拓扑排序是做不了的,正解是反向建图,同时用大根堆的优先队列维护,保证每次优先访问编号大的结点,再反向输出~

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
vector<int> g[maxn];
vector<int> topOrder;
int inDegree[maxn];
int N,M,x,y;
void topSort () {
priority_queue<int> q;
for (int i=;i<=N;i++)
if (inDegree[i]==) q.push(i);
while (!q.empty()) {
int u=q.top();
q.pop();
topOrder.push_back(u);
for (int i=;i<g[u].size();i++) {
int v=g[u][i];
if (--inDegree[v]==)
q.push(v);
}
}
}
int num[maxn];
int main () {
while(~scanf("%d %d",&N,&M)) {
fill(inDegree,inDegree+maxn,);
topOrder.clear();
for (int i=;i<maxn;i++) g[i].clear();
for (int i=;i<M;i++) {
scanf("%d %d",&x,&y);
g[y].push_back(x);
inDegree[x]++;
}
topSort();
for (int i=;i<topOrder.size();i++) {
num[topOrder[i]]=N-i;
}
for (int i=;i<=N;i++) {
if (i!=) printf (" ");
printf ("%d",num[i]);
}
printf ("\n");
}
return ;
}

D.传送门

特殊的,点的权值也可以作为最小生成树的边,建树时贪心操作即可~

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=;
const ll inf=1e18;
ll g[maxn][maxn];
ll w[maxn];
int visit[maxn];
ll d[maxn];
ll c[maxn];
int N;
ll prim (int s) {
fill (d,d+maxn,inf);
fill (visit,visit+maxn,);
d[s]=w[s];
ll ans=;
for (int i=;i<=N;i++) {
int u=-;ll mmin=inf;
for (int j=;j<=N;j++)
if (!visit[j]&&d[j]<mmin) {
u=j;
mmin=d[j];
}
if (u==-) return -;
visit[u]=;
ans+=d[u];
//printf ("%d\n",d[u]);
for (int v=;v<=N;v++)
if (!visit[v]&&v!=u) d[v]=min(w[v],min(d[v],g[u][v]));
}
return ans;
}
struct node {
int x,y;
}Node[maxn];
int main () {
scanf("%d",&N);
for (int i=;i<=N;i++)
for (int j=;j<=N;j++) g[i][j]=inf;
for (int i=;i<=N;i++) scanf("%d %d",&Node[i].x,&Node[i].y);
for (int i=;i<=N;i++) scanf("%lld",&w[i]);
for (int i=;i<=N;i++) scanf("%lld",&c[i]);
for (int i=;i<=N;i++) {
for (int j=i+;j<=N;j++) {
ll dis=(c[i]+c[j])*(abs(Node[i].x-Node[j].x)+abs(Node[i].y-Node[j].y));
//printf ("%lld\n",dis);
g[i][j]=g[j][i]=dis;
}
}
int u=-;
ll mmin=inf;
for (int i=;i<=N;i++) {
if (w[i]<mmin) {
mmin=w[i];u=i;
}
}
ll ans=prim(u);
printf ("%lld\n",ans);
return ;
}

ACM-ICPC实验室20.2.21测试-图论(二)的更多相关文章

  1. ACM-ICPC实验室20.2.19测试-图论

    B.Harborfan的新年拜访Ⅱ 就是一道tarjan缩点的裸题. 建图比较麻烦 以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式 #include<bits/stdc++.h& ...

  2. 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)D 不定方程

    题目链接:https://ac.nowcoder.com/acm/contest/2720/D 题意:对于 ax = by = c ,给出 x, y 求符合条件的 a, b, c 且 c 为最小的解, ...

  3. ACM-ICPC实验室20.2.22测试-动态规划

    C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...

  4. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  5. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  6. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  7. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online

    网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...

  8. hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...

  9. Java in ACM/ICPC

    目录 Java在ACM/ICPC中的特点 在ACM/ICPC中使用Java需要注意的问题 Java与高精度计算 1.Java在ACM/ICPC中的特点 Java的语法和C++几乎相同 Java在执行计 ...

随机推荐

  1. HDU 4544 湫湫系列故事——消灭兔子 (优先队列)

    湫湫减肥  越减越肥!    最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏.  游戏规则很简单,用箭杀死免子即可.  箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子 ...

  2. win10驱动签名禁用与启动

    禁用:https://jingyan.baidu.com/article/624e74594dbc8d34e8ba5aa6.html?qq-pf-to=pcqq.c2c 启用或恢复:https://z ...

  3. 在myEclipse中根据图表自动生成Hibernate文件

    1.新建一个Java Project项目,在scr中创建两个包:Com.hibernate.po 和com.hibernate.dao 2. 3.点击ok 4. 5.选中MyElipse Derby, ...

  4. DeepLearningDTU: Building a RNN step by step

    exercise 5: Week 5 - Recurrent Neural Networks Building your Recurrent Neural Network - Step by Step

  5. (转)java垃圾回收二

    转自:http://shuaijie506.iteye.com/blog/1779651 在网上看到一篇不错的文章,记录下来备忘. 要理解java对象的生命周期,我们需要要明白两个问题, 1.java ...

  6. Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题

    Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序被 ...

  7. 【NOIP2012普及组】质因数分解

    P1075 质因数分解 假期第一天就给一道入门难度的题写题解…… 这道题一开始就被我想复杂了:埃式筛,欧拉筛……然而开一个1e9的数组?不现实. 直到看到题解区的dalao用唯一分解定理: 算术基本定 ...

  8. 从心出发-刷leetcode写给5年后的自己

    而立之年终未立,不惑而年犹存惑!这或许就是所谓的中年危机吧! 自认为是一个"勤奋"的人,又"未有寸功",天天碌碌,不知何为. "常立志"而未 ...

  9. java中成员变量,局部变量,静态变量的辨析

    转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...

  10. 用阿里fastJson解析Json字符串

    一下总结来自工作代码: 1.第一种情况: 通过服务器端发送http请求获取的接送字符串. String jsonStr = HttpRequestUtil.sendGet(config.getAddr ...