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 ;
}

最新文章

  1. HTML中&amp;nbsp; &amp;ensp; &amp;emsp; &amp;thinsp;等6种空白空格的区别
  2. css知多少(1)——我来问你来答
  3. 【leetcode】Text Justification(hard) ☆
  4. 【Java多线程】JUC包下的工具类CountDownLatch、CyclicBarrier和Semaphore
  5. WWF3控制流程类型活动&lt;第二篇&gt;
  6. Debugging JTAG Connectivity Problems
  7. sae的kvdb使用注意
  8. poj 3273 Monthly Expense (二分搜索,最小化最大值)
  9. java中的四则运算
  10. Ubuntu 用 pptp 建立 vpn 服务
  11. dwExStyle和dwStyle的说明(Delphi SDK窗口)
  12. IT只忍者龟Photoshop简单人像的头发抠图过程
  13. 我看过得最易懂的一段AOP的解释
  14. RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib
  15. Echart ,X轴显示的为tooltip内显示的一部分内容放在上面显示的一部分如下图所示
  16. centos7 (ifconfig不能使用) -bash: ifconfig: command not found
  17. aspnet-api-versioning
  18. &lt;Android 基础(三十二)&gt; ViewFlipper
  19. firefox chrome ie9,10,11 不支持selectSingleNode和selectNodes的解决方法
  20. linux管道命令学习(一)

热门文章

  1. Piggy-Bank HDU - 1114 完全背包
  2. AcWing 10. 有依赖的背包问题
  3. window snmp
  4. spring boot no identifier specified for entity
  5. Unity3D制作3D虚拟漫游场景(二)
  6. 55.ORM外键:引用同app下的不同模型,引用不同app下的模型,引用模型自身使用详解
  7. Java注释&amp;标识符
  8. C++-POJ2975-Nim
  9. Codeforces Round #603 (Div. 2) C.Everyone is A Winner!
  10. java基础之 修饰符