啊对,没有过
其中这是读入志愿的
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>x;
if(x)
choose[i][++ccnt[i]]={x,j+n};
}
sort(choose[i]+1,choose[i]+ccnt[i]+1,cmp);
}
导师的点编号是导师点编号+n
所以后面连边就是
link(i,choose[i][p].second,1,i);
link(choose[i][p].second,i,0,i);
WA on568910
好这下子改成这样
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>x;
if(x)
choose[i][++ccnt[i]]={x,j};
}
sort(choose[i]+1,choose[i]+ccnt[i]+1,cmp);
}
后面link边改成这样
while(choose[i][p].first==color)
{
link(i,choose[i][p].second+n,1,i);
link(choose[i][p].second+n,i,0,i);
p++;
}
一个是读入时+n,一个是连边时+n等价的是吧
好这下子WA on 245910
更神奇的是本来排序与导师无关只与导师志愿有关是吧
后面这种写法如果将cmp:
bool cmp(pair<int,int>a,pair<int,int>b)
{
if(a.first!=b.first) return a.first<b.first;
return a.second<b.second;
}
改成
bool cmp(pair<int,int>a,pair<int,int>b)
{
return a.first<b.first;
}
就会再WA一个6
神奇,太神奇了
所以求调实在不行求求数据也可以啊给组hack什么的吧对拍又全部拍过本来发誓昨天没过就要去当lin的狗的今天调nm一上午还没调过